
小清新GoF23种设计模式
文章平均质量分 83
本专栏旨在总结GoF23种设计模式,包括设计模式的概述、适用性、参与者、类图、示例以及结果。每个部分力求做“小清新”,方便读者快速理解和掌握。
innovation
Out of small things a great heap will be formed.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
GoF23种设计模式之行为型模式之访问者模式
传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 今天我们学习如何自定义TextView组件,让它既能显示文本,又能显示图像,达到“图文并茂”的效果。这种情景在新闻、文章、彩信内容中很常见。下面给出该场景的案例:一、案例技术要点1.创建attrs.xml文件用于设置自定义组件的属性、类型和样式。原创 2013-06-06 14:19:37 · 2129 阅读 · 0 评论 -
GoF23种设计模式之行为型模式之模板方法
传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 今天我们学习如何实现Android应用的自动更新版本功能,这是在各种语言编写的应用中都会经常遇到的情景。当我们的应用检测到网络上有新版本发布时,系统会提示是否下载新版本应用,当新版本应用下载完毕后,系统会自动安装下载的新版本应用(或跳转到相关安装页面询问原创 2013-06-05 22:24:14 · 2275 阅读 · 0 评论 -
GoF23种设计模式之行为型模式之策略模式
一、概述 定义一系列算法,把它们一个个都封装起来,并且让它们可以相互替换。策略模式使得算法可以独立于使用它的客户而发生变化。二、适用性1.许多相关的类仅仅是行为存在差异的时候。“策略”提供了一种使用多个行为中的一个来配置一个类的方法。2.需要使用一个算法的不同变体的时候。3.算法使用了客户不应该知道的数据的时候。以避免暴露复杂的、与算法相关的数据结构。4.一个原创 2013-06-13 23:35:06 · 3282 阅读 · 0 评论 -
GoF23种设计模式之行为型模式之状态模式
一、概述 定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。二、适用性1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。2.一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常有多个操作包含这一相同的条件结构。状态模式将每一个原创 2013-05-28 21:42:00 · 2051 阅读 · 1 评论 -
GoF23种设计模式之行为型模式之观察者模式
一、概述 定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。二、适用性1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面的时候。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。2.当对一个对象的改变需要同时改变其它对象,而且不知道具体有多少对象需要改变的时候。3.当一个对象必须通知其它对象,原创 2013-05-28 13:17:40 · 1966 阅读 · 0 评论 -
GoF23种设计模式之行为型模式之解释器模式
一、概述 给定一种语言和其文法的一种表示,再定义一个解释器,该解释器使用表示来解释语言中的句子。二、适用性 当需要解释一种语言,并且可以将该语言中的句子表示为一个抽象语法树的时候。1.该文法简单对于复杂的文法,文法的类层次变得庞大而无法管理。2.效率不是一个关键问题,最高效的解释器通常不是通过直接解释语法分析树实现的,而原创 2013-06-03 14:41:29 · 1860 阅读 · 0 评论 -
GoF23种设计模式之行为型模式之备忘录模式
一、概述 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象的外部保存这个状态。以便以后可以将该对象恢复到原先保存的状态。二、适用性1.当需要保存一个对象在某个时刻的状态(部分)的时候,以便需要时可以恢复到先前保存的状态。2.当不愿意暴露对象的实现细节和破坏对象的封装性,又需要让其他对象得到该对象的状态的时候。 三、参与者1.Memento:备原创 2013-05-28 01:52:50 · 1819 阅读 · 2 评论 -
GoF23种设计模式之行为型模式之中介者模式
一、概述 使用一个中介对象来封装一系列的对象交互。中介者让各个对象无需显式地相互引用,从而达到解耦的效果。并且可以独立地改变它们之间的交互。二、适用性1.当一组对象以定义良好但复杂通信的时候。产生的相互依赖关系结构混乱且难以理解。2.当一个对象引用其他许多对象并且直接与这些对象通信的时候。会导致难以复用该对象。3.当需要定制一个分布在多个类中的行为,而又不想生成过原创 2013-05-28 01:34:42 · 1529 阅读 · 0 评论 -
GoF23种设计模式之行为型模式之迭代器模式
一、概述 给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。二、适用性1.当访问一个聚合对象的内容而无需暴露它的内部表示的时候。2.当对聚合对象的多种遍历提供支持的时候。3.当为了遍历不同的聚合结构提供一个统一的接口的时候(多态迭代)。 三、参与者1.Iterator:迭代器定义访问和遍历元素的接口。2.Concr原创 2013-05-28 01:02:51 · 1598 阅读 · 0 评论 -
GoF23种设计模式之行为型模式之命令模式
一、概述 将一个请求封装为一个对象,从而可以使用不同的请求对客户端进行参数化。对请求排队或记录请求日志,以及支持撤销的操作。二、适用性1.当抽象出待执行的动作以参数化某个对象的时候。2.当需要在不同的时刻指定、排列和执行请求的时候。3.当需要支持撤销操作的时候。4.当需要支持修改日志的时候。系统崩溃时,这些修改可以重做一遍。5.当用构建在原语操作上的高层操原创 2013-06-03 22:39:09 · 2118 阅读 · 0 评论 -
GoF23种设计模式之行为型模式之责任链模式
一、概述 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并且沿着这条链传递请求,直到有一个对象处理它为止。其设计思想是:给对多个对象处理一个请求的机会,从而解耦请求发送者和接收者。二、适用性1.有多个对象可以处理一个请求,到底是哪个对象处理请求,交由运行时刻自动确定的时候。2.你想在不明确指定接收者的情况下,向多个对象中原创 2013-06-03 14:37:01 · 1994 阅读 · 0 评论 -
GoF23种设计模式之结构型模式之代理模式
一、概述 为其他对象提供一种代理以控制对这个对象的访问。二、适用性1.远程代理(RemoteProxy):为一个对象在不同的地址空间土工局部代表。2.虚代理(VirtualProxy):根据需要创建开销很大的对象。3.保护代理(ProtectionProxy):控制对原始对象的访问。4.智能代理(SmartReference):取代简单的指针,在访问对象时执行原创 2013-05-31 12:13:42 · 2034 阅读 · 0 评论 -
GoF23种设计模式之结构型模式之享元模式
一、概述 运用共享技术有效地支持大量细粒度的对象。二、适用性1.当一个应用程序使用了大量的对象的时候。2.由于使用大量的独享而造成很大的存储开销的时候。3.对象的大多数状态都可变为外部状态的时候。4.如果删除对象的外部状态,那么可以用相对较少的共享独享取代很对组对象的时候。5.应用程序不依赖于对象标识的时候。由于享元模式对象可以被共享,对于概念上明显有别原创 2013-05-30 20:12:51 · 1443 阅读 · 0 评论 -
GoF23种设计模式之结构型模式之外观模式
一、概述 为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。二、适用性1.当你要为一个复杂子系统提供一个简单接口的时候。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。外观模式可以提原创 2013-05-31 12:11:51 · 1731 阅读 · 0 评论 -
GoF23种设计模式之结构型模式之装饰模式
一、概述 动态地给一个对象添加一些额外的职责。装饰模式比生成子类更为灵活。二、适用性1.在不影响其他对象的情况下,以动态、透明的方式给但个对象添加职责。2.处理那些可以撤销的职责。3.当不能采用生成子类的方式进行扩展的时候。三、参与者1.Component:定义一个对象接口,可以给这些对象动态地添加职责。2.ConcreteComponent:定义一个原创 2013-05-31 12:10:17 · 1840 阅读 · 0 评论 -
GoF23种设计模式之结构型模式之组合模式
一、概述 将对象组合成树型结构以表示“部分--整体”的层次关系。组合模式使得用户对单个对象和组合对象的使用具有一致性。二、适用性1.你想表示对象的部分--整体层次结构的时候。2.你希望用户忽略组合对象与单个对象的不同的时候,用户将统一地使用组合结构中的所有对象。三、参与者1.Component:为组合中的对象声明接口。在适当的情况下,实现所有类共有接口的缺省行原创 2013-05-31 12:09:32 · 1620 阅读 · 1 评论 -
GoF23种设计模式之结构型模式之桥接模式
一、概述 将类的抽象部分与实现分部分离开来,使它们都可以独立地变化。二、适用性1.你不希望在抽象和实现之间有一个固定的绑定关系的时候。例如:在程序运行时实现部分应可以被选择或切换。2.类的抽象以及实现都应该可以通过生成子类的方法加以扩充的时候。桥接模式使你可以对不同的抽象接口和实现进行组合,并且分别对它们进行扩充。3.对一个抽象的实现部分的修改应对客户不产生影响的原创 2013-05-31 12:08:37 · 1680 阅读 · 0 评论 -
GoF23种设计模式之结构型模式之适配器模式
一、概述 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。二、适用性1.你想使用一个已经存在的类,但是它的接口不符合你的要求的时候。2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口肯不一定兼容的类)协同工作的时候。3.你想使用一些已经存在的子类,但是不可能对每一个都进行原创 2013-05-31 04:07:51 · 2286 阅读 · 0 评论 -
GoF23种设计模式之创建型模式之原型模式
一、概述 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。二、适用性1.当一个系统应该独立于它的产品创建、构成和表示的时候。2.当要实例化的类是在运行时刻指定的时候,例如:通过动态装载。3.为了避免创建一个与产品类层次平行的工厂类层次的时候。4.当一个类的实例只能有几个不同状态组合中的一种的时候。 建立相应数目的原型并克隆它们原创 2013-05-30 12:59:12 · 1999 阅读 · 0 评论 -
GoF23种设计模式之创建型模式之单态模式
一、概述 保证一个类仅有一个实例,并提供一个访问它的全局访问点。二、适用性1.当类只能有一个实例而且客户可以从一个总所周知的访问点访问它的时候。2.当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例的时候。三、参与者Singleton:定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类的操作,可原创 2013-05-30 16:09:39 · 1777 阅读 · 0 评论 -
GoF23种设计模式之创建型模式之建造者模式
一、概述 将一个复杂对象的构建与其表示分离开来,使得同样的构建过程可以创建不同的表示。二、适用性1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式的时候。2.当构造过程必须允许被构造的对象有不同的表示的时候。三、参与者1.Builder:为创建一个Product对象的各个部件指定抽象接口。2.ConcreteBuilder:实现Build原创 2013-05-30 15:19:41 · 1802 阅读 · 0 评论 -
GoF23种设计模式之创建型模式之抽象工厂模式
一、概述 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。二、适用性1.一个系统要独立于它的产品的创建、组合和表示的时候。2.一个系统要由多个产品系列中的一个来配置的时候。3.当你要强调一系列相关的产品对象的设计以便进行联合使用的时候。4.当你提供一个产品类库,而只想显示它们的接口而不是实现的时候。三、参与者1.AbstractFa原创 2013-05-30 13:55:50 · 2039 阅读 · 1 评论 -
GoF23种设计模式之创建型模式之工厂方法模式
一、概述 定义一个用于创建对象的接口,让子类去决定实例化哪个类。工厂方法将一个类的实例化延迟至其子类。二、适用性1.当一个类不知道它所必须创建的对象的类的时候。2.当一个类希望由其子类来指定它所创建的对象的时候。3.当类将创建对象的职责委托给多个帮助子类的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。三、参与者1.Product:定义工厂原创 2013-05-30 04:41:18 · 4119 阅读 · 1 评论