摘要: 一、概述 定义一个用于创建对象的接口,让子类去决定实例化哪个类。工厂方法将一个类的实例化延迟至其子类。 二、适用性 1.当一个类不知道它所必须创建的对象的类的时候。 2.当一个类希望由其子类来指定它所创建的对象的时候。 3.当类将创建对象的职责委托给多个帮助子类的某一个,并且你希望将哪一个帮助子类是 阅读全文
posted @ 2017-09-03 23:00 皇问天 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 一、概述 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 二、适用性 1.一个系统要独立于它的产品的创建、组合和表示的时候。 2.一个系统要由多个产品系列中的一个来配置的时候。 3.当你要强调一系列相关的产品对象的设计以便进行联合使用的时候。 4.当你提供一个产品类库,而只想显 阅读全文
posted @ 2017-09-03 22:59 皇问天 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 一、概述 将一个复杂对象的构建与其表示分离开来,使得同样的构建过程可以创建不同的表示。 二、适用性 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式的时候。 2.当构造过程必须允许被构造的对象有不同的表示的时候。 三、参与者 1.Builder:为创建一个Product对象的各个 阅读全文
posted @ 2017-09-03 22:57 皇问天 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 1概述 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 2适用性 1.当类只能有一个实例而且客户可以从一个总所周知的访问点访问它的时候。 2.当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例的时候。 3参与者 Singleton:定义一个Instance 阅读全文
posted @ 2017-09-03 22:56 皇问天 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 一、概述 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 二、适用性 1.当一个系统应该独立于它的产品创建、构成和表示的时候。 2.当要实例化的类是在运行时刻指定的时候,例如:通过动态装载。 3.为了避免创建一个与产品类层次平行的工厂类层次的时候。 4.当一个类的实例只能有几个不同 阅读全文
posted @ 2017-09-03 22:55 皇问天 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 一、概述 将类的抽象部分与实现分部分离开来,使它们都可以独立地变化。 二、适用性 1.你不希望在抽象和实现之间有一个固定的绑定关系的时候。例如:在程序运行时实现部分应可以被选择或切换。 2.类的抽象以及实现都应该可以通过生成子类的方法加以扩充的时候。桥接模式使你可以对不同的抽象接口和实现进行组合,并 阅读全文
posted @ 2017-09-03 22:50 皇问天 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 一、概述 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 二、适用性 1.你想使用一个已经存在的类,但是它的接口不符合你的要求的时候。 2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口肯不一定兼容的类) 阅读全文
posted @ 2017-09-03 22:50 皇问天 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 一、概述 将对象组合成树型结构以表示“部分--整体”的层次关系。组合模式使得用户对单个对象和组合对象的使用具有一致性。 二、适用性 1.你想表示对象的部分--整体层次结构的时候。 2.你希望用户忽略组合对象与单个对象的不同的时候,用户将统一地使用组合结构中的所有对象。 三、参与者 1.Compone 阅读全文
posted @ 2017-09-03 22:49 皇问天 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 一、概述 为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 二、适用性 1.当你要为一个复杂子系统提供一个简单接口的时候。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进 阅读全文
posted @ 2017-09-03 22:48 皇问天 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 一、概述 动态地给一个对象添加一些额外的职责。装饰模式比生成子类更为灵活。 二、适用性 1.在不影响其他对象的情况下,以动态、透明的方式给但个对象添加职责。 2.处理那些可以撤销的职责。 3.当不能采用生成子类的方式进行扩展的时候。 三、参与者 1.Component:定义一个对象接口,可以给这些对 阅读全文
posted @ 2017-09-03 22:48 皇问天 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 一、概述 为其他对象提供一种代理以控制对这个对象的访问。 二、适用性 1.远程代理(RemoteProxy):为一个对象在不同的地址空间土工局部代表。 2.虚代理(VirtualProxy):根据需要创建开销很大的对象。 3.保护代理(ProtectionProxy):控制对原始对象的访问。 4.智 阅读全文
posted @ 2017-09-03 22:44 皇问天 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 一、概述 运用共享技术有效地支持大量细粒度的对象。 二、适用性 1.当一个应用程序使用了大量的对象的时候。 2.由于使用大量的独享而造成很大的存储开销的时候。 3.对象的大多数状态都可变为外部状态的时候。 4.如果删除对象的外部状态,那么可以用相对较少的共享独享取代很对组对象的时候。 5.应用程序不 阅读全文
posted @ 2017-09-03 22:44 皇问天 阅读(201) 评论(1) 推荐(0) 编辑
摘要: 一、概述 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并且沿着这条链传递请求,直到有一个对象处理它为止。其设计思想是:给对多个对象处理一个请求的机会,从而解耦请求发送者和接收者。 二、适用性 1.有多个对象可以处理一个请求,到底是哪个对象处理请求,交 阅读全文
posted @ 2017-09-03 22:42 皇问天 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 一、概述 将一个请求封装为一个对象,从而可以使用不同的请求对客户端进行参数化。对请求排队或记录请求日志,以及支持撤销的操作。 二、适用性 1.当抽象出待执行的动作以参数化某个对象的时候。 2.当需要在不同的时刻指定、排列和执行请求的时候。 3.当需要支持撤销操作的时候。 4.当需要支持修改日志的时候 阅读全文
posted @ 2017-09-03 22:41 皇问天 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 一、概述 使用一个中介对象来封装一系列的对象交互。中介者让各个对象无需显式地相互引用,从而达到解耦的效果。并且可以独立地改变它们之间的交互。二、适用性1.当一组对象以定义良好但复杂通信的时候。产生的相互依赖关系结构混乱且难以理解。2.当一个对象引用其他许多对象并且直接与这些对象通信的时候。会导致难以 阅读全文
posted @ 2017-09-03 22:40 皇问天 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 一、概述 给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。二、适用性1.当访问一个聚合对象的内容而无需暴露它的内部表示的时候。2.当对聚合对象的多种遍历提供支持的时候。3.当为了遍历不同的聚合结构提供一个统一的接口的时候(多态迭代)。 三、参与者1.I 阅读全文
posted @ 2017-09-03 22:40 皇问天 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 一、概述 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象的外部保存这个状态。以便以后可以将该对象恢复到原先保存的状态。 二、适用性 1.当需要保存一个对象在某个时刻的状态(部分)的时候,以便需要时可以恢复到先前保存的状态。2.当不愿意暴露对象的实现细节和破坏对象的封装性,又需要让其他对象 阅读全文
posted @ 2017-09-03 22:39 皇问天 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 一、概述 给定一种语言和其文法的一种表示,再定义一个解释器,该解释器使用表示来解释语言中的句子。 二、适用性 当需要解释一种语言,并且可以将该语言中的句子表示为一个抽象语法树的时候。 1.该文法简单对于复杂的文法,文法的类层次变得庞大而无法管理。 2.效率不是一个关键问题,最高效的解释器通常不是通过 阅读全文
posted @ 2017-09-03 22:38 皇问天 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 一、概述 定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。二、适用性1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面的时候。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。2.当对一个对象的改变需要同时改变其它对象,而且不 阅读全文
posted @ 2017-09-03 22:37 皇问天 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 一、概述 定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 二、适用性 1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。2.一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多 阅读全文
posted @ 2017-09-03 22:36 皇问天 阅读(236) 评论(0) 推荐(0) 编辑