创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
设计模式的使用:
首先,设计模式有其应用的场合,不相宜的场合乱用设计模式有害无益;其次,设计模式主要解决对象之间相互通信、 相互依赖的结构关系。
在描述一个设计模式时,至少需要包含四个方面:模式名称(Pattern name)、问题(Problem)、解决方案(Solution)、效果(Consequence)。
设计模式要有自己的名称。
设计模式的目的就是解决问题。
设计模式要有解决问题的方法描述。
设计模式有其更具体的效果描述。
创造型模式:
(1) Factory Method 模式(工场方法模式)。 Factory Method 模式提供了一种延迟创建类的方法,使用
这个方法可以在运行期由子类决定创建哪一个类的实例。
(2) Abstract Factory 模式(抽象工场模式)。 Abstract Factory 又称为抽象工厂模式,该模式主要为解决
复杂系统中对象创建的问题。
(3) Builder 模式(建造者模式)。 Builder 模式与 Abstract Factory 模式非常类似,但Builder模式是逐步地构造出一个复杂对象,并在最后返回对象的实例。Builder 模式可以把复杂对象的创建与表示分离,使得同样的创建过程可以创建不同的表示。
(4) Prototype 模式(原型模式)。 Prototype 模式可以根据原型实例制定创建的对象的种类,并通过深复制这个原型来创建新的对象。 Prototype 模式有着同 Abstract Factory 模式和 Builder模式相同的效果,不过当需要实例化的类是在运行期才被指定的而且要避免创建一个与产品曾是平行的工厂类层次时,可以使用 Prototype 模式。使用 Prototype 模式可以在运行时增加或减少原型,比 Abstract Factory 和 Builder 模式更加灵活。
(5) Singleton 模式(单例模式)。 Singleton 模式也是一种很有代表性的模式。使用 Singleton 模式可以保证一个类仅有一个实例,从而可以提供一个单一的全局访问点。将在 9.2 中对Singleton 作更详细的介绍。
结构型模式:
(6) Adapter 模式。 Adapter 模式可以解决系统间接口不相容的问题。通过 Adapter 可以把类的接口转化为客户程序所希望的接口,从而提高复用性。
(7) Bridge 模式。 Bridge 模式把类的抽象部分同实现部分相分离,这样类的抽象和实现都可以独立地变化。
(8) Composite 模式。 Composite 模式提供了一种以树形结构组合对象的方法,使用Composite 可以使单个对象和组合后的对象具有一致性以提高软件的复用性。
(9) Decorator 模式。 Decorator 模式可以动态地为对象的某一个方法增加更多的功能。在很多时候,使用 Decorator 模式可以不必继承出新的子类从而维护简洁的类继承结构。在 9.2 节中将对 Decorator 模式作更详细的介绍。
(10) Facade 模式。 Facade 模式为一组类提供了一致的访问接口。使用 Facade 可以封装内部具有不同接口的类,使其对外提供统一的访问方式。 Facade 模式在 J2EE 系统开发中发展为 Session Facade 模式。
(11) Flyweight 模式。 Flyweight 模式可以共享大量的细粒度对象,从而节省创建对象所需要分配的空间,不过在时间上的开销会变大。
(12) Proxy 模式。顾名思义, Proxy 模式为对象提供了一种访问代理,通过对象 Proxy可以控制客户程序的访问。例如:访问权限的控制、访问地址的控制、访问方式的控制等,甚至可以通过 Proxy 将开销较大的访问化整为零,提高访问效率。
行为模式:
(13) Interpreter 模式。定义了一个解释器,来解释遵循给定语言和文法的句子。
(14)Template Method 模式。定义一个操作的模板,其中的一些步骤会在子类中实现,以适应不同的情况。
(15) Chain of Responsibility 模式。 Chain of Responsibility 模式把可以响应请求的对象组织成一条链,并在这条对象链上传递请求,从而保证多个对象都有机会处理请求而且可以避免请求方和相应方的耦合。
(16) Command 模式。将请求封装为对象,从而增强请求的能力,如参数化、排队、记录日志等。
(17) Iterator 模式。 Iterator 模式提供了顺序访问一个对象集合中的各元素的方法,使用 Iterator 可以避免暴露集合中对象的耦合关系。
(18) Mediator 模式。 Mediator 模式可以减少系统中对象间的耦合性。 Mediator 模式使用中介对象封装其他的对象,从而使这些被封装的对象间的关系就成了松散耦合。
(19) Memento 模式。 Memento 模式提供了一种捕获对象状态的方法,且不会破坏对象的封装。并且可以在对象外部保存对象的状态,并在需要的时候恢复对象状态。
(20) Observer 模式。 Observer 模式提供了将对象的状态广播到一组观察者的方式,从而可以让每个观察者随时可以得到对象更新的通知。
(21) State 模式。 State 模式允许一个对象在其内部状态改变的时候改变它的行为。
(22) Strategy 模式。使用 Strategy 模式可以让对象中算法的变化独立于客户。
(23) Visitor 模式。表示对某对象结构中各元素的操作,使用 Visitor 模式可以在不改变各元素类的前提下定义作用于这些元素的新操作。