一、设计模式的功能
-
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模式。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/124938.html