一、设计模式的功能
- Bridge桥接模式:在“类的功能层次结构”和“类的实现层次结构”之间搭建桥梁
- Observer观察者模式:将状态变化的通知发送给观察对象
- Adapter适配器模式:填补“现有的程序”和“所需的程序”之间差异
- Strategy策略模式:可以整体地替换算法的实现部分
- State状态模式:用类来表示状态
- Template Method模板方法模式:在父类中定义处理流程的框架,在子类中实现具体处理。将具体的处理交给子类
详见:设计模式学习(六):Template Method模板方法模式
- Factory Method工厂模式:将Template Method模式用于生成实例。将实例的生成交给子类
详见:设计模式学习(七):Factory Method工厂模式
- Proxy代理模式:如果“本人”对象无法自己亲自完成一些工作,就将其交给“代理人”对象负责
- Abstract Factory抽象工厂模式:构建抽象工厂,它会将抽象零件组装为抽象产品
详见:设计模式学习(九):Abstract Factory抽象工厂模式
- lterator迭代器模式:在数据集合中按照顺序遍历集合
- Builder建造者模式:组装具有复杂结构的实例
- Decorator装饰器模式:保证装饰物与被装饰物的一致性
二、设计模式之间的关联和区别
2.1 关联和区别
- Bridge模式是为了关联“类的实现层次结构”和“类的功能层次结构”。在Template Method模式中就使用了“类的实现层次结构”:父类调用抽象方法,而子类实现抽象方法。
- 使用Bridge模式可以达到类的功能层次结构与类的实现层次结构分离的目的,并在此基础上使这些层次结构结合起来。而使用Adapter模式则可以结合那些功能上相似但是接口不同的类。
- Adapter模式用于填补不同接口之间的缝隙,而Decorator模式则是在不改变接口的前提下增加功能。
- 使用Strategy模式可以整体地替换算法。使用Abstract Factory模式则可以整体地替换具体工厂、零件和产品。
- 在Template Method模式中,可以使用继承改变程序的行为。这是因为Template Method模式在父类中定义程序行为的框架,在子类中决定具体的处理。与此相对的是Strategy模式,它可以使用委托改变程序的行为。与Template Method模式中改变部分程序行为不同的是,Strategy模式用于替换整个算法。
- 使用Strategy模式和State模式都可以替换被委托对象,而且它们的类之间的关系也很相似。但是两种模式的目的不同。在Strategy模式中,ConcreteStrategy 角色是表示算法的类。在Strategy模式中,可以替换被委托对象的类。当然如果没有必要,也可以不替换。而在State模式中,ConcreteState角色是表示“状态”的类。在State模式中,每次状态变化时,被委托对象的类都必定会被替换。
- Factory Method模式是将Template Method模式用于生成实例的一个典型例子。
- Adapter模式适配了两种具有不同接口(API)的对象,以使它们可以一同工作。而在Proxy模式中,Proxy角色与RealSubject角色的接口(API)是相同的(透明性)。
- Decorator模式与Proxy模式在实现上很相似,不过它们的使用目的不同。Decorator模式的目的在于增加新的功能。而在Proxy模式中,与增加新功能相比,它更注重通过设置代理人的方式来减轻本人的工作负担。
- Abstract Factory模式通过调用抽象产品的接口来组装抽象产品,生成具有复杂结构的实例。Builder模式则是分阶段地制作复杂实例。
- 在 Builder模式中,Director角色控制 Builder角色。在Template Method模式中,父类控制子类。这里的“控制”指的是方法的调用顺序的控制。在Builder模式中,Director 决定了Builder角色中方法的调用顺序,而在Template Method模式中,父类决定了子类方法的调用顺序。
- Builder模式和Abstract Factory模式都用于生成复杂的实例。
- Decorator模式可以在不改变被装饰物的接口(API)的前提下,为被装饰物添加边框(透明性)。Adapter模式用于适配两个不同的接口(API )。
- Decorator模式可以像改变被装饰物的边框或是为被装饰物添加多重边框那样,来增加类的功能。Stragety模式通过整体地替换算法来改变类的功能。
2.2 互相使用
- 在Bridge模式中,为了能够根据需求设计出良好的ConcreteImplementor角色,有时我们会使用AbstractFactory模式。
- 有时,在 Iterator模式中使用iterator方法生成Iterator的实例时会使用Factory Method模式。
- 有时,Abstract Factory模式中零件和产品的生成会使用到Factory Method模式。
- 有时,在iterator方法中生成Iterator的实例时可能会使用Factory Method模式。