首先,设计模式和面向对象设计是互为补充.对于设计模式的资料,看上去抽象,甚至比较哲学.但是我们需要理解他们.要学习的是设计模式的思想.
设计模式是从建筑学和人类学发展起来的.这两者都认为"美"的,优秀的设计是有客观的标准的.Christopher Alexander这个建筑师对设计模式的研究起了很大的作用.他首先有个信念,那就是"设计的质量可以客观衡量".为了研究这个问题,他开始对各种建筑进行观察.他采用这样的研究方式--观察解决相似问题的不同解决方案,找出不同方案的相似之处.之所以用这个方式,是因为他明白,结构和它要解决的问题是不能分离的.他把这些相似之处称为"模式".他给模式下的定义是"在某一个情景下的问题的解决方案".
每个模式,通过一种让你可以无数次使用这一解决方案,而不必再次重复同样工作的方式,描述一个在我们的环境中重复出现的问题,并描述该问题的核心.
Alexander说一个模式的说明应该包含四个部分,我们来看看. 第一个是模式的名称.这样人们就可以来鉴别模式,用于交流. 第二个是模式的目的,它要解决的问题.(模式就是为了解决问题).第三个是我们如何实现它.也就是模式的具体实现.第四个是为了实现我们必须考虑的限制和约束.
Alexander相信模式可以解决特定问题,并且,复杂的问题可以用模式的组合来解决.
Alexander的理论在建筑学获得成功,那么对软件是否有用呢?答案是肯定的.讲述设计模式比较著名的书是"四人团"写的<设计模式:可复用面向对象软件的基础>.
本章中,作者给出了模式的一些基本要素,我们罗列下
名称:每个模式都有个唯一的名称意图:模式的目的问题:模式试图解决的问题解决方案:对于自己出现的场景中的问题,模式怎么提供一个解决方案参与与协作者:模式包括的实体效果:使用模式的效果.使用模式的同时研究其约束.实现:怎么实现模式(实现只是模式的具体表现形式,而不像模式本身那样被分析)GoF参考:在四人团的书中得到更多信息的位置. 作者然后论述了下为什么要学习设计模式.比较重要的是三个方面.
模式给你一个更高层次的视角复用解决方案建立通用的术语 另外,四人团针对"创建优秀面向对象设计"建议了一些策略.我们需要牢记在心.
针对接口编程优先使用对象组合,而不是类继承找到并封装变化点. 这些策略对于改良设计有莫大的帮助.我们要时刻牢记.