======================= 把《设计模式》上提到的每一种模式过一遍,看多大比例的模式能总结为: “把拥有N个恶性依赖的协作,变成拥有M个良性依赖的协作” (如果每个模式都画出恶性依赖的图和良性依赖的图对比,更有好处) 1。创建模式5个 2。结构模式7个 3。行为模式11个 ======================= 1。创建模式5个 在这些模式中有两个不断出现的主旋律。 第一,它们都将关于该系统使用哪些具体的类的信息【封装】起来。 第二,它们【隐藏】了这些类的实例是如何被创建和放在一起的。整个系统关于这些对象所知道的是由抽象类所定义的接口。 手段:抽象基类 ----------------------------------------- 检查: clt -》virtual base class 《- subclass ,良性依赖 ======================= 2。结构模式7个 结构型模式涉及到如何组合类和对象以获得更大的结构。 结构型类模式采用继承机制来组合接口或实现。这一模式尤其有助于多个独立开发的类库协同工作。 结构型对象模式描述了如何对一些对象进行组合,从而实现新功能的一些方法。因为可以在运行时刻改变对象组合关系,所以对象组合方式具有更大的灵活性。 ----------------------------------------- A d a p t e r 模式给出了多个不同接口的统一抽象。 B r i d g e 模式将对象的抽象和其实现分离,从而可以独立地改变它们。 注:它们都给另一对象提供了一定程度上的间接性,因而有利于系统的灵活性。它们都涉及到从自身以外的一个接口向这个对象转发请求。A d a p t e r模式在类已经设计好后实施;而B r i d g e模式在设计类之前实施。 ----------------------------------------- Decorator 模式旨在使你能够不需要生成子类即可给对象添加职责。 Composite 模式形成任意复杂的结构,并且使多个相关的对象能够以统一的方式处理,其中,多重对象可以被当作一个对象来处理。 注:它们具有类似的结构图,这说明它们都基于递归组合来组织可变数目的对象。但这两个模式的目的不同。 ----------------------------------------- P r o x y模式的目的是,当直接访问一个实体不方便或不符合需要时,为这个实体提供一个替代者,提供对对象的间接访问,也可限制、增强或修改访问。 F l y w e i g h t的对象共享机制主要强调对象的空间效率。 F a c a d e 模式则描述了如何用单个对象表示整个子系统。 手段:组合(对象模式),继承(类模式) ----------------------------------------- 检查:第1类 和 第3类的proxy 为的就是间接性,a -》b 变成 a -》m -》b,良性依赖 ======================= 3。行为模式11个 ----------------------------------------- 行为类模式使用继承机制在类间分派行为。本章包括两个这样的模式: Te m p l a t e M e t h o d 是一个算法的抽象定义,它逐步地定义该算法,每一步调用一个抽象操作或一个原语操作,子类定义抽象操作以具体实现该算法。 I n t e r p r e t e r 将一个文法表示为一个类层次,并实现一个解释器作为这些类的实例上的一个操作。 ----------------------------------------- m e d i a t o r提供了松耦合所需的间接性。 Chain of Responsibility 提供更松的耦合。它让你通过一条候选对象链隐式的向一个对象发送请求。 O b s e r v e r 模式定义并保持对象间的依赖关系。 ----------------------------------------- 其他的行为对象模式常将行为封装在一个对象中并将请求指派给它: S t r a t e g y 模式将算法封装在对象中,这样可以方便地指定和改变一个对象所使用的算法。 C o m m a n d 模式将请求封装在对象中,这样它就可作为参数来传递,也可以被存储在历史列表里,或者以其他方式使用。 S t a t e 模式封装一个对象的状态,使得当这个对象的状态对象变化时,该对象可改变它的行为。 Vi s i t o r 封装分布于多个类之间的行为, I t e r a t o r 则抽象了访问和遍历一个集合中的对象的方式。 ----------------------------------------- MEMENTO(备忘录)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 ----------------------------------------- 检查: 第2类,间接性,a-》b 变成 a-》m-》b,良性依赖 第3类,和消息包很像 第4类,在对象之外,就是良性依赖