刚看完第二章, 顺带看桥接模式.
桥接模式是将构造最终目标(客户代码)用的公共接口抽象出来, 用不同的方式来实现这些抽象出来的公共接口.
不同的设计模式, 就是根据需要抽象了不同的地方, 封装了某一部分的变化, 同时阻碍了另一部分的变化.
对Builder的理解感觉总不大透彻, 看了这篇
http://www.cnblogs.com/happyhippy/archive/2010/09/01/1814287.html, 讲得还不错.
我认为通篇最重要的一句话就是
Builder模式的核心是“聚合”感觉Builder类的体系基本就是AbstractFactory, 只是不需要重定义所有的创建部件的接口.
最终产品是由ConcreteBuilder返回, 而Builder的BuildPart的工作是将部件
组装到产品上, 而不仅仅是创建. 这就是说Director类其实只提供了步骤.
FactoryMethod和AbstractFactory的区别看起来是很明显的, 区别就在于Method, 其实FactoryMethod最终只是一个抽象方法.
"变化可以说是复用的基本所在。所以我认为看待设计模式一切都应从变化的角度来看。
factory method看到了单个类别的变性和部分代码逻辑的不变性,为了解决这种不对称,构建出这样的一个中介(creator)让之对称。
abstract facotry则是看到了多个相关类别的变性和部分代码逻辑的不变性,为了解决这种不对称,也构建这样的一个中(creator)让之对称,同时它也看到了这些类别的相关性,根据这种相关性来减少creator的数量。
所以,factory method和abstract facotry的眼中的变化基点是不一样的,这也造成了他们之间的差别。"
摘自
http://www.cnblogs.com/happyhippy/archive/2010/09/26/1836223.html这篇的讨论, 对于理解设计模式的方式很有启发.
Decorator模式倒是跟Composite模式有异曲同工之妙. 都是用相同的接口操作不同的对象, 而对客户代码完全透明. 不同之处在于Composite模式是为了使对象聚合, 而Decorator模式是为了给对象添加新的功能.
FACADE, 外观模式. 将繁杂的一系列接口封装为一个新的简易接口, 如果是完全封装, 则有 解耦, 封装, "使接口易用而不会被误用" 等疗效. GOF的书里的例子是不完全封装, 则最大的作用是"使接口易用而不会被误用", 保留用户调用子系统接口的权利. 外观模式更像是一种思想而非具体的模式. 个人感觉就像是一个类里面的private函数(子系统功能)和public函数的关系(外观接口).
突然想到, 如果写程序需要用到抽象的时候, 也就是需要考虑设计模式的时候, 否则的话, 最好的设计模式就是不用设计模式.