《Head First设计模式》 读书笔记15 其余的模式(一) 桥接 生成器 责任链
桥接(Bridge Pattern)
使用桥接模式(Bridge Pattern) ,不只改变你的实现,也改变你的抽象。
例子场景:遥控器的设计。
桥接模式通过将实现和抽象放在两个不同的类层次中而使它们可以独立改变。
现在你有了两个层次结构,其中一个是遥控器,而另一个是平台特定的电视机实现。有了桥接的存在,你就可以独立地改变这两个层次。
优点:
将实现予以解耦,让它和界面之间不再永久绑定。
抽象和实现可以独立扩展,不会影响到对方。
对于“具体的抽象类”所做的改变,不会影响到客户。
用途:
适合使用在需要跨越多个平台的图形和窗口系统上。
当需要用不同的方法改变接口和实现时,你会发现桥接模式很好用。
缺点:
桥接模式的缺点是增加了复杂度。
生成器(Builder Pattern)
使用生成器模式(Builder Pattern)封装一个产品的构造过程,并允许按步骤构造。
例子场景:制定度假计划,每个客人的度假计划可能都不太一样。
我们将旅游规划的创建过程,封装到一个对象中(称此对象为生成器),然后让客户调用生成器为它创建旅游规划。
优点:
将一个复杂对象的创建过程封装起来。
允许对象通过多个步骤来创建,并且可以改变过程(这和只有一个步骤的工厂模式不同)。
向客户隐藏产品内部的表现。
产品的实现可以被替换,因为客户只看到一个抽象的接口。
用途:
经常被用来创建组合结构。
缺点:
与工厂模式相比,采用生成器模式创建对象的客户,需要具备更多的领域知识。
责任链(Chain of Responsibility Pattern)
当你想要让一个以上的对象有机会能够处理某个请求的时候,就使用责任链模式(Chain of Responsibility Pattern) 。
例子场景:使用邮件过滤程序来处理收到的邮件。
通过责任链模式,你可以为某个请求创建一个对象链。每个对象依序检查此请求,并对其进行处理,或者将它传给链中的下一个对象。
链中的每个对象扮演处理器,并且有一个后继对象。如果它可以处理请求,就进行处理;否则把请求转发给后继者。
优点:
将请求的发送者和接收者解耦。
可以简化你的对象,因为它不需要知道链的结构。
通过改变链内的成员或调动它们的次序,允许你动态地新增或者删除责任。
用途:
经常被使用在窗口系统中,处理鼠标和键盘之类的事件。
缺点:
并不保证请求一定会被执行;如果没有任何对象处理它的话,它可能会落到链尾端之外(这可以是优点也可以是缺点)。
可能不容易观察运行时的特征,有碍于除错。