一.概述        定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.二.适用性1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面的时候.将这二者封装在独立的对象中以使它们可以各自独立地改变和复用.2.当对一个对象的改变需要同时改变其它对象,而且不知道具体有多少对象需要改变的时候.3.当一个对象必须通知其它对象,而它又不能假定其它对象是谁的时候.三.参与者1.Subject(目标):目标知道它的观察者.可以有任意多个观察者观察同一…
一.概述         定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 二.适用性 1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为.2.一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态.这个状态通常用一个或多个枚举常量表示.通常有多个操作包含这一相同的条件结构.状态模式将每一个条件分支放入一个独立的类中.使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独…
传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 1概述           定义一系列算法,把它们一个个都封装起来,并且让它们可以相互替换.策略模式使得算法可以独立于使用它的客户而发生变化. 2适用性 (1)许多相关的类仅仅是行为存在差异的时候.“策略”提供了一种使用多个行为中的一个来配置一个类的方法.(2)需要使用一个算法的不同变体的时候.(3)算法使用了客户不应该知道的数据的时候.以避免暴露复杂的.与算法相关的数据结构.(4)…
一.概述 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 二.适用性 1.当一个系统应该独立于它的产品创建.构成和表示的时候. 2.当要实例化的类是在运行时刻指定的时候,例如:通过动态装载. 3.为了避免创建一个与产品类层次平行的工厂类层次的时候. 4.当一个类的实例只能有几个不同状态组合中的一种的时候. 建立相应数目的原型并克隆它们可能要比每次用合适的状态手工实例化该类更方便一些. 三.参与者 1.Prototype:声明一个克隆自身的接口. 2.ConcreteProtot…
一.概述    给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.二.适用性1.当访问一个聚合对象的内容而无需暴露它的内部表示的时候.2.当对聚合对象的多种遍历提供支持的时候.3.当为了遍历不同的聚合结构提供一个统一的接口的时候(多态迭代). 三.参与者1.Iterator:迭代器定义访问和遍历元素的接口.2.ConcreteIterator:具体迭代器实现迭代器接口.对该聚合遍历时跟踪当前位置.3.Aggregate:聚合定义创建相应迭代器对象的接…
一.概述         给定一种语言和其文法的一种表示,再定义一个解释器,该解释器使用表示来解释语言中的句子. 二.适用性              当需要解释一种语言,并且可以将该语言中的句子表示为一个抽象语法树的时候. 1.该文法简单对于复杂的文法,文法的类层次变得庞大而无法管理. 2.效率不是一个关键问题,最高效的解释器通常不是通过直接解释语法分析树实现的,而是首先将它们转换成另一种形式. 三.参与者 1.AbstractExpression:声明一个抽象的解释操作,这个接口为抽象语法树…
概述 表示一个作用于某对象结构中的各元素的操作. 它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 适用性 1.一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作. 2.需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象的类. Visitor使得你可以将相关的操作集中起来定义在一个类中. 当该对象结构被很多应用共享时,用Visitor模式让每个应用仅包含需要用到的操作. 3.定义对象结构的类很少改…
一.概述 定义一个用于创建对象的接口,让子类去决定实例化哪个类.工厂方法将一个类的实例化延迟至其子类. 二.适用性 1.当一个类不知道它所必须创建的对象的类的时候. 2.当一个类希望由其子类来指定它所创建的对象的时候. 3.当类将创建对象的职责委托给多个帮助子类的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候. 三.参与者 1.Product:定义工厂方法所创建的对象的接口. 2.ConcreteProduct:实现Product接口. 3.Creator:声明工厂方法,该方法返…
一.概述 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 二.适用性 1.一个系统要独立于它的产品的创建.组合和表示的时候. 2.一个系统要由多个产品系列中的一个来配置的时候. 3.当你要强调一系列相关的产品对象的设计以便进行联合使用的时候. 4.当你提供一个产品类库,而只想显示它们的接口而不是实现的时候. 三.参与者 1.AbstractFactory:声明一个创建抽象产品对象的操作接口. 2.ConcreteFactory:实现创建具体产品对象的操作. 3.Abstra…
一.概述 将一个复杂对象的构建与其表示分离开来,使得同样的构建过程可以创建不同的表示. 二.适用性 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式的时候. 2.当构造过程必须允许被构造的对象有不同的表示的时候. 三.参与者 1.Builder:为创建一个Product对象的各个部件指定抽象接口. 2.ConcreteBuilder:实现Builder接口以构造和装配该产品的各个部件. 3.Director:构造一个使用Builder接口的对象. 4.Product:表示被构…