抽象工厂模式(学习笔记)

1. 意图 提供一个接口以提供一系列相关或相互依赖的对象,而无须知道指定它们的具体的类 2. 别名 Kit 3. 动机 在软件系统中经常面临着一系列相互依赖的对象的创建工作;同时,由于需求变化,往往存在更多系列对象的创建工作 如何绕过常规的对象创建方法(new),提供一种封装机制来避免客户程序和这种 ...

策略模式(学习笔记)

1. 意图 定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化 2. 动机 假设打算为游客们创建一款导游程序。该程序的核心功能是提供美观的地图,以帮助用户在任何城市中快速定位。用户期待的程序新功能是自动路线规划:他们希望输入地址后就能在地图上看到前往 ...

访问者模式(学习笔记)

1. 意图 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作 2. 动机 假如你的团队开发了一款能够使用巨型图像中地理信息的应用程序。图像中的每个节点既能代表复杂实体(例如一座城市),也能代表更精细的对象(例如工业区和旅游景点等)。如果节点代表 ...

观察者模式(学习笔记)

1. 意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新 2. 动机 假设这样一种情况,顾客对某个特定品牌的产品非常感兴趣(例如最新型号的 iPhone 手机),而该产品很快将会在商店里出售。顾客可以每天来商店看看产品是否到货。但如果商品尚未 ...

状态模式(学习笔记)

1. 意图 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类 2. 动机 状态模式与有限状态机的概念紧密相关。其主要思想是程序在任意时刻仅可处于几种有限的状态中。在任何一个特定状态中,程序的行为都不相同,且可瞬间从一个状态切换到另一个状态。不过,根据当前状态,程序可能会切换到另 ...

模板方法(学习笔记)

1. 意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 2. 动机 假设正在开发一款分析公司文档的数据挖掘程序。用户需要向程序输入各种格式(PDF、DOC或CSV)的文档,程序则会从这些文档中抽取 ...

备忘录模式(学习笔记)

1. 意图 在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态 2. 动机 假如你开发一款文字编辑器应用程序。除了简单的文字编辑功能外,编辑器还要有设置文本格式和插入内嵌图片的等功能。后来,决定添加一个让用户能撤销施加在文本上的任何操作 ...

命令模式(学习笔记)

1. 意图 将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作 2. 动机 假如开发一款新的文字编辑器,当前的任务是创建一个包含多个按钮的工具栏,并让每个按钮对应编辑器的不同操作。创建了一个非常简洁的按钮类,它 ...

中介者模式(学习笔记)

1. 意图 用一个中介对象来封装一系列的对象交互。中介者是各个对象不需要显示的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互 2. 动机 面向对象设计鼓励将行为分布到各个对象中。这种分布可能导致对象间有很多连接。在最坏的情况,每一个对象都知道其他对象的存在。 虽然将一个系统分割成许多对 ...

职责链模式(学习笔记)

1. 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止 2. 动机 假设现在开发一个在线订购系统。希望对系统访问进行限制,只允许认证用户创建订单。可是,在接下来的几个月里,不断有新的需求提了出来... ...

代理模式(学习笔记)

1. 意图 提供对象的替代品或其占位符。代理控制着对于原对象的访问,允许在将请求提交给对象前后进行一些处理 2. 动机 在面向对象的系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问对象会给使用者或者系统结构带来很多麻烦 3. 适用性 ...

享元模式(学习笔记)

1. 意图 运用共享技术有效的支持大量细粒度的对象 2. 动机 假设开发了一款简单的游戏:玩家们在地图上移动并进行相互射击。大量的子弹、导弹和爆炸弹片在整个地图上穿行,为玩家提供紧张刺激的游戏体验。但是,运行了几分钟后,游戏因为内存容量不足而发生了崩溃。研究发现,每个粒子(一颗子弹、 一枚导弹或一块 ...

外观模式(学习笔记)

1. 意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 2. 动机 将一个系统划分成若干个子系统有利于降低系统的复杂性。一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小。达到该目标的途径之一就是引入一个外观对象,他为子系统 ...

迭代器模式(学习笔记)

1. 意图 提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象内部表示 2. 动机 有时候,会使用不同的算法来遍历集合中的元素,不断地向集合中添加遍历算法会模糊其高效存储数据的主要职责。此外,有些算法可能是根据特定应用订制的,将其加入到泛型集合类中会显得非常奇怪。另一方面,使用多种集 ...

装饰模式(学习笔记)

1. 意图 动态的给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活 2. 动机 在某些情况下,我们可能会“过度的使用继承来扩展对象的功能”。继承是静态的,无法在运行时更改已有对象的行为,只能使用由不同子类创建的对象来替代当前的整个对象;并且随着子类的增多(扩展 ...

组合模式(学习笔记)

1. 意图 讲对象组合成树形结构以表示“部分——整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性 2. 动机 如果应用的核心模型能用树状结构表示,在应用中使用组合模式才有价值 假如,有两类对象:产品和盒子。一个盒子可以包含几个产品或多个较小的盒子。这些小盒子也可以包含 ...

桥模式(学习笔记)

1. 意图 将抽象部分与它的实现部分分离,使它们可以独立的变化 2. 动机 如左图所示,如果此时需求变化,假设有n个形状(圆形,方形,长方形...),增加m个颜色,则需要额外增加(n+1)*m个类,会造成类爆炸。另外,代码后期维护成本很高。桥模式使用组合代替继承来解决这个问题。这样只会增加m个新类, ...

适配器模式(对象适配器学习笔记)

1. 意图 将一个类的接口装换成客户希望的另外一个接口 2. 动机 有时,为复用而设计的工具类不能够被复用仅仅是因为它的接口与专业应用领域所需要的接口不匹配。Adapter经常还要负责提供那些被匹配的类所没有提供的功能(有点类似装饰模式) 3. 适用性 想使用一个已经存在的类,而它的接口不符合你的需 ...

单例模式(学习笔记)

1. 意图 保证一个类只有一个实例, 并提供一个访问该实例的全局节点 2. 动机 控制某些共享资源(数据库或文件)的访问权限 为该实例提供一个全局访问点 3. 适用性 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时 更严格的控制全局变量 4. 结构 5. 效果 1) 对唯一实例的受控访 ...

生成器设计模式(学习笔记)

1. 意图 将一个复杂对象的创建与它的表示分离,使得同样的创建过程可以创建不同的表示 2. 动机 软件系统中,有时候面临着一个复杂对象的创建工作,通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法相对稳定 如何应对这种变化? ...

123···13>