在软件工程中,设计模式用来描述在各种不同情况下,要怎么解决问题的一种方案。面向对象设计模式通常以类或对象来描述其中的关系和相互作用,是软件“设计”层次上的问题。使用设计模式可提高代码的重用性和可靠性,使代码更容易被他人理解,使代码编制真正工程化。
一般将设计模式分为三种类型,共23种:
1.创建型模式
抽象工厂模式(Abstract Factory):为一个产品族提供一系列相关或相互依赖对象的接口,当需要该产品族某一系列时,可以从抽象工程中选出相应的系列创建一个具体的工程类。
工厂模式(Factory Method):定义一个接口用于创建对象,让子类决定将哪一个类实例化,即把一个类得实例化延迟到其子类。
单例模式(Singleton):确保一个类仅有一个实例,并提供对该实例的全局访问点。
原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
建造者模式(Builder):将一个复杂对象的“构建”与“表示”分离,使得同样的构建过程可以创建不同的表示。
2.结构型模式
代理模式(Proxy):为其他对象提供一个代理,以控制对该对象的访问。
适配器模式(Adapter):将某个类的接口转换成客户端需要的另一种接口表示,使得原来接口不匹配的那些类达到兼容效果。
桥接模式(Bridge):将抽象部分和它的实现部分分离,以便两者可以独立地变化。
组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构,这样使得用户可以统一对待单个对象和复合对象。
装饰模式(Decorator):是除类继承外的另一种扩展功能的方法,即动态地给某个对象添加一些额外的功能。
外观模式(Facade):为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
享元模式(Flyweight):通过共享技术以有效地支持大量细粒度对象。
3.行为型模式
观察者模式(Observer):在对象间定义一种一对多的依赖关系,以便当一个对象改变状态时,其他相关的对象会被通知并自动刷新。
策略模式(Strategy):定义一系列算法,将它们各自封装,并使它们之间存在交互性。Strategy模式使得算法在用户使用时能独立地改变。
模版方法模式(Template Method):构建一个顶级逻辑框架,而将逻辑的细节延迟到具体子类中去实现。即准备一个抽象类,将部分逻辑以具体方法及具体构建子类的形式实现,然后声明一些抽象方法迫使子类实现剩余的逻辑,这样不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。
迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露改对象的内部表示。
访问者模式(Visitor):封装一些施加于某种数据结构元素之上的操作。这样在不改变各元素类的前提下,可对这些元素实现新的操作。Visitor模式适用于数据结构相对未定的系统,它把数据结构和作用于数据结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化。
命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
状态模式(State):允许一个对象在其内部状态改变时,其行为也随之改变。State模式需要对每个系统可能获取的状态创立一个状态类的子类,当系统的状态变化时,系统便改变所选的子类。
解释器模式(Interpreter):给定一种语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
中介者模式(Mediator):用一个中介对象来封装一系列的对象交互,使得这些对象不需显示地相互引用,从而使其耦合松散。当某些对象之间的作用发生改变时,不会立即影响其他一些对象之间的作用,保证这些作用可以彼此独立地变化。
职责链模式(Chain of Responsibility):为解除请求的发送者和接受者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并外部化保存该状态,从而以后可以将该对象恢复到保存时的状态。