最近在学习设计模式,想在这里记下一点心得,望各位大神多多指教。
看了Gof设计模式一共有分成8个部分,今天先开始第一个部分:引言(pdf版在文章最后)
1、什么是设计模式?
本书中的设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。简单点说就是::不是解决任何问题都要从头做起。他们更愿意复用以 前使用过的解决方案。当找到一个好的解决方案,他们会一 遍又 一遍地使用。这些经验是他们成为内行的部分原因。因此,你会在许多面向对象系统中看到类和相 互通信 的对象 (communication object)的重复模式。这些模式解决特定的设计问题,使面向对象设计更灵活、优 雅,最终复用性 更好。它们帮助设计 者将新的设计建立在以往工作的基础上,复用以往成功的设计方案。一 个熟悉这些模式的设计 者不需要再去发现它们,而能够立即将它们应用于设计问题中。
2、设计模式一般分成四个基本要素:模式名称,问题,解决方案,效果。
模式名称(pattern name)一个助记名,它用一两个词来描述模式的问题、解决方案和效果。
问题(problem) 描述了应该在何时使用模式
解决方案(solution) 描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式
效果(consequences) 描述了模式应用的效果及使用模式应权衡的问题
3、如何描述设计模式?通过模式名和分类,意图,别名,动机,适用性,结构,参与者,协作,实现和相关模 式
意图:是回答下列问题的简单陈述:设计模式是做什么的?它的基本原理和意图是什么
别名:模式的其它名称
动机:用以说明一个设计问题以及如何用模式中的类、对象来解决该问题的特定情景。该情景会帮助你理解随后 对模式更抽象的描述
适用性:什么情况下可以使用该设计模式?该模式可用来改进哪些不良设计?你怎样识别这些情况?
参与者:设计模式中的类和/或对象以及它们各自的职责 。
协作:模式的参与者怎样协作以实现它们的职责。
实现:实现模式时需要知道的一些提示、技术要点及应避免的缺陷,以及是否存在某些特定于实现语言的问题
相关模式 与这个模式紧密相关的模式有哪些?其间重要的不同之处是什么?这个模式应与哪些其他模式一起使 用?
4、设计模式的编目:23个设计模式的名字和意图
Abstract Factory( 3 . 1 ):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
A d a p t er ( 4 . 1 ):将一个类的接口转换成客户希望的另外一个接口。A d a p t e r模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
B r i d g e( 4 . 2 ):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
B u i l d e r( 3 . 2 ):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
Chain of Responsibility( 5 . 1 ):为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求 。将这些对象连成一条链,并沿着这条链传递该请求 ,直到有一个对象处理它。
C o m m a n d( 5 . 2 ):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队 或记录请求日志,以及支持可取消的操作。
C o m p o s i t e( 4 . 3 ):将对象组合成树形结构以表示“部分-整体”的层次结构。C o m p o s i t e使得客户对单个对象和复合对象的使用具有一致性。
D e c o r a t o r( 4 . 4 ):动态地给一个对象添加一些额外的职责。就扩展功能而言, D e c o r a t o r模式比生成 子类方式更为灵活。
F a c a d e( 4 . 5 ):为子系统中的一组接口提供一个一致的界面, F a c a d e模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
Factory Method( 3 . 3 ):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。
Factory Method使一个类的实例化延迟到其子类。
F l y w e i g h t( 4 . 6 ):运用共享技术有效地支持大量细粒度的对象。
I n t e r p r e t e r( 5 . 3 ):给定一个语言, 定义它的文法的一种表示,并定义一个解释器, 该解释 器使用该表示来解释语言中的句子。
I t e r a t o r( 5 . 4 ):提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
M e d i a t o r( 5 . 5 ):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互
M e m e n t o( 5 . 6 ):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。
O b s e r v e r( 5 . 7 ):定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的 对象都得到通知并自动刷新。
P r o t o t y p e( 3 . 4 ):用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
P r o x y( 4 . 7 ):为其他对象提供一个代理以控制对这个对象的访问。
S i n g l e t o n( 3 . 5 ):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
S t a t e( 5 . 8 ):允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。
S t r a t e g y (5 . 9 ):定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法的变 化可独立于使用它的客户。
Template Method( 5 . 1 0 ):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
5、组织编目:
在后面还有关于怎么选择和怎样使用设计模试的两小节,这里不在多说,详细的请看pdf