一些常见设计模式之间的对比

1.Bridge vs. Strategy  桥接模式 vs 策略模式

 Bridge: structural pattern  强调双方的运行时委托链接

一个类A的对象中有其他类B的对象作为其组成部分,但A的对象具体绑定到B的哪个具体子类的实现?在运行时通过delegation加以组合,并永久保存这种delegation关系。它分离抽象和实现,并允许两者独立变化。

 Strategy: 行为类模式  强调一方运行时使用另一方的“算法”
-行为模式处理算法或业务逻辑(而不是对象创建本身),即关注对象之间的协作。

-它能让你在运行时在多个算法之间切换。

 “算法”通常实现为“类的某个方法”的形式,strategy 的 目的 并非在“ 调用算法的类”与“被调用算法所在的类 ”之间建立起永久联系, 而只是帮助前者临时使用后者中的 “算法”,前者无需永久保存后者的实例。

2.Proxy vs. Adaptor 代理模式 vs 适配器模式

Adapter: 目的:消除不兼容,目的是B以客户端期望的统一的方式与A 建立起联系。
-典型的实现是一个封装类或一组类。
-目的不是为了方便将来的接口更改,而是为了方便当前的接口不兼容。

 Proxy: behavioral pattern, 目的 :隔离对复杂对象的访问,降低难度/代价, 定位在“访问/使用行为”
-真正的资源驻留在远程计算机上(代理促进与远程资源的交互)
-创建真正的资源是昂贵的(代理确保成本不会发生,除非/直到真正需要)
-代理为它所替代的真实资源提供了一个替代,因此它必须提供相同的接口。

3.Composite vs Decorator 组合模式 vs 装饰器模式

Composite:结构模式,允许您以允许外部代码将整个结构视为单个实体的方式构建层次结构(树)。
-叶子实体的接口与复合实体的接口完全相同。目的是在同类型的对象之间建立起树型层次结构,一个上层对象可包含多个下层对象。
-复合结构中的所有元素都具有相同的界面,尽管有些是叶节点,有些是整个结构。
Decorator:结构模式,允许一个实体完全包含另一个实体,以便使用装饰看起来相同的所包含的实体。
-这允许decorator在不改变实体外观的情况下修改其封装的任何内容或行为。强调的是同类型对象之间的“特性增加”问题,

它们之间是平等的,区别在于 “拥有特性”的多少,每次decoration只能作用于一个object。

4.Observer Pattern  观察者模式

优势:
-主体与观察者之间的低耦合:主体不知道被依赖者
-支持广播:能够动态增减观察员
-出乎意料的更新:由观察者无法控制。
实现问题
-观察者的存储列表:通常在受试者中
-观察多个主题:通常为update()添加参数
-谁触发更新:主体的状态设置操作

5.Visitor vs Iterator

 Iterator: behavioral pattern,迭代器:以遍历的方式访问集合数据而无需暴露其内部表示,将“遍历”这项功能delegate到外部的iterator对象。
Visitor: behavioral pattern, 在特定ADT上执行某种特定操作,但该操作不在ADT内部实现,而是delegate到独立的visitor对象,客户端可灵活扩展/改变visitor的操作算法,而不影响ADT

6.Strategy vs visitor

  二者都是通过delegation 建立两个对象的动态联系
– 但是Visitor强调是的外部定义某种对ADT的操作,该操作于ADT自身关系不大(只是访问ADT),故ADT内部只需要开放accept(visitor)即可,client通过它设定visitor操作并在外部调用。
– 而Strategy则强调是对ADT内部某些要实现的功能的相应算法的灵活替换。这些算法是ADT功能的重要组成部分,只不过是delegate到外部strategy类而已。
区别:visitor是站在外部client的角度,灵活增加对ADT的各种不同操作(哪怕ADT没实现该操作),strategy则是站在内部ADT的角度,灵活变化对其内部功能的不同配置。

7.Observer vs Mediator

Observer pattern: 一组object对另一个object B的状态变化感兴趣(1对多),所以对其进行观察。B维持着一个对自己感
兴趣的object list,一旦自己发生变化,就通知这些object。双方地位并不对等,一方只是“通知”,另一方接到通知后执行特定行为。
Mediator pattern: 一组同类型的object,彼此之间相互发/收消息(多对多),不存在谁观察谁的问题,所有object都对等。
每个object都维持一个mediator,将通讯的任务delegate给它,自己只负责send和receive即可,无需了解其他object,实现了“解耦”。
Observer:自己来广播,其他对象接收;
Mediator:第三方中介负责广播(类似于“邮件列表”)。

8.Façade vs. Command

 Façade: structural pattern
Command: behavioral pattern
均强调对某个复杂系统内部提供的功能的“封装”,对外提供简单的调用接口,简化client 的使用,“隐藏”细节  。
Command :强调将指令封装为了“对象”,提供了统一的对外接口(execute)  。
Façade :没有显式的“对象”,仍然通过类的方法加以调用。

9.总结

Composite, Adapter, Bridge, Façade, Proxy (结构型模式)
– 关注:将对象组合成更大的结构
• 从旧功能实现新功能,
• P提供了灵活性和可扩展性
Command, Observer, Strategy, Template (行为类模式)
– 关注: 对对象的算法和责任分配
• 避免与特定解决方案紧密耦合
Abstract Factory, Builder (创建型模式)
– 关注:复杂对象的创建
• 隐藏复杂对象的创建和组合

猜你喜欢

转载自blog.csdn.net/weixin_39627422/article/details/80762022