随笔分类 -  Design Pattern

有关设计模式的一些文章.
摘要:OOP基础。OOP有三大目标,重用性、灵活性和扩展性。OOP有三大特性,封装、继承和多态。抽象虽然不是OOP的编程特性,但它却是所有编程语言的最大特性。封装,隐藏程序的属性和的实现细节,并控制属性的访问权限,对外仅提供接口。继承,是对基类的代码进行利用并扩展基类,是一个从一般到特殊的过程。多态,运行... 阅读全文
posted @ 2014-05-20 22:55 飞鹤0755 阅读(197) 评论(0) 推荐(0) 编辑
摘要:定义:访问者模式(VistorPattern),表示一个作用于对象结构中各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。类型:对象行为型模式。概述:访问者模式适用的场合比较狭窄,因为它的要求非常严。ConcreteElement要求具有一样的算法接口,并且Concret... 阅读全文
posted @ 2014-04-22 16:25 飞鹤0755 阅读(212) 评论(0) 推荐(0) 编辑
摘要:定义:模板方法模式(TemplateMethod Pattern),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模块方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。类型:类行为型模式概述:模板方法模式应该算是所有设计模式中最简单,却也是应用得最多的模式了。模板方法模式其... 阅读全文
posted @ 2014-04-20 22:30 飞鹤0755 阅读(267) 评论(0) 推荐(0) 编辑
摘要:定义:观察者模式(ObserverPattern),定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。类型:对象行为型模式概述:观察者模式也是比较难以理解,单看类图,会发现观察者模式与中介模式非常相似。如果不真正理解他们二者之间的区别,是难以真正理解观察者模式的。如果不理解观察者模式,更奢谈运用观察者模式了。中介模式主要是解决一系列交互对象的耦合的问题,而提出了中介类。几个以前交互的对象现在统一通过中介类来完成交流。而观察者模式侧重的是一对多的通知的功能,即当发生某件事时,主题对象将向所有注册过的观察者对象发出通知消息。中介模式侧重通过中介 阅读全文
posted @ 2014-03-12 00:07 飞鹤0755 阅读(474) 评论(1) 推荐(0) 编辑
摘要:定义:中介者模式(MediatorPattern),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。类型:对象行为型模式概述:面向对象编程,鼓励将行为分散到对象当中。这样的好处,增强对象的可复用性,但是带来的负面作用是,当多个对象交互时不可避免地会带来耦合性的大大提升。中介者模式的提出,就是为了解决多个对象相互交互时耦合性提升的问题。中介者模式主要通过将不同对象中涉及到交互的行为抽象出来,达到解耦的作用。这样,每个对象都只需要和中介者打交到即可,不用关注太多的对象。比如一个项目组,有一个项目经理和几个项目开发人员。如 阅读全文
posted @ 2014-03-07 21:14 飞鹤0755 阅读(408) 评论(0) 推荐(0) 编辑
摘要:定义:迭代器模式(IteratorPattern),提供一种方法顺序访问一个聚合对象中各个元素,而又暴露无遗该对象的内部表示。类型:对象行为型模式概述: 正如定义所言,迭代器是为解决更好的访问一个聚合对象中的各个元素而产生的。迭代器是对象行为模式,也即它主要是通过将对象中的访问行为提取出来作为迭代器类。迭代器的产生,主要是为了解决客户端对聚合对象内部元素访问时可能造成的耦合。为了使得迭代器能够访问更多的聚合对象,所以需要面向接口编程,即为迭代器和聚合对象分别提供统一接口。 C++中的STL库、C#,Java的泛型类型都有封装迭代器,所以下面的示例重点了解迭代器的工作原理。举一个简单示例,有一. 阅读全文
posted @ 2014-02-26 18:20 飞鹤0755 阅读(228) 评论(0) 推荐(0) 编辑
摘要:定义:解释器模式(Interpreter Pattern)给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。类型:类行为型模式概述:正如GoF所介绍的,解释器模式的应用场合比较窄。解释器模式在《Head First Design Pagtterns》中也被列为非常用模式。解释器模式虽然说更多应用在某种语言上,但是解释器的原理还是可以应用在其他场合的。解释器模式与组合模式有很大的相似性。正如GoF所言,在最宽泛的概念下,几乎每个使用复合模式的系统也都使用了解释器模式。解释器模式与组合模式的不同主要体现在,解释器模式中的几个解释器类都有相同的接口,而组 阅读全文
posted @ 2014-02-19 21:47 飞鹤0755 阅读(202) 评论(0) 推荐(0) 编辑
摘要:定义:命令模式(Command Pattern),将一个请求封闭成一个对象,从而使你可用不同的请求对客户进行参数化;对请求排除或记录请求日志,以及支持可撤销的操作。类型:行为型模式。概述: 命令模式,被《HeadFirst设计模式》列为常见的设计模式之一,而且光看类图,感觉很简单。可是真正要去运用的时候,往往会发现无从下手。因为你不知道什么时候该使用命令模式。任何关联的两个类,你发现居然都可以使用命令模式。但是使用了之后,发现代码理解起来似乎变得更复杂了。本来比较简单,并且耦合并不严重的两个类,再加进来一个命令类,反倒更复杂了。如果严格依照迪米特法则,差不多任何两个有关联的类都似乎需要一个中介 阅读全文
posted @ 2014-02-15 16:27 飞鹤0755 阅读(670) 评论(3) 推荐(1) 编辑
摘要:定义:职责链模式(Chain OfResponsibility Pattern),使从个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理安为止。类型:行为型模式。概述:职责链模式,行为型模式,说明其主要是通过行为来表现的。这里的行为,也可以理解为方法(Method)。职责链模式,将一堆处理事件的行为对象抽象为一个个的类。有些类似链表结构,每个类中都有一个指针,指向它的下一个类。这样,当一个类处理完它要处理的事情之后,就将工作将给下一个类来处理。如果下一个类发现它暂时无事可做,它依然将职责转到下一个类去处理。职责链模 阅读全文
posted @ 2014-01-22 11:22 飞鹤0755 阅读(688) 评论(0) 推荐(0) 编辑
摘要:定义:代理模式(ProxyPattern),为其他对象提供一种代理以控制对这个对象的访问。类型:结构型模式分类:远程代理,为一个对象在不同的地址空间提供局部代表。虚代理,根据需要创建开销很大的对象。保护代理,控制对原始对象的访问。智能指引,取代简单指针,在访问时执行一些附加操作。概述:远程代理,如代理商,什么区域代、省代之类的都算是远程代理。代理商在某一局部代表厂商。虚代理,主要是为了解决一次开销过大的情况,例如打开大的文件之类的。保护代理,律师就是代理委托人行使其保护其权利,正好是保护代理。智能指针,智能指针,画图双缓存等都算是智能指引了,主要是复用对象的某些特性自动完成某些工作,如构造函数 阅读全文
posted @ 2014-01-21 01:25 飞鹤0755 阅读(212) 评论(0) 推荐(0) 编辑
摘要:定义:享元模式(Flyweight Pattern),运用共享技术有效地支持大量细粒度的对象。类型:结构型模式。适用情况:一个应用程序有大量的对象。对象的大多数状态都是外部的。如果删除对象的外部状态,可以和相对较少的共享对象取代很多组对象。应用程序不依赖对象的标识,即应用程序依赖于对象的抽象接口。概述: Flyweight,原意为“轻量级选手”的意思。翻译者将它意为享元模式,是意译,力求能够直观地表现出此模式的目的。享,共享之意。元,基本单元的意思。享元,也就是共享基本单元,也即GoF所言的运用共享技术有效地支持大量细粒度的对象。享元模式的重点在于将对象的“内部状态”和“外部状态”抽象出来,内 阅读全文
posted @ 2014-01-20 12:28 飞鹤0755 阅读(507) 评论(0) 推荐(0) 编辑
摘要:定义:外观模式(Façade Pattern),为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。类型:结构型模式。适用性:当子系统非常复杂时,使得客户调用非常麻烦,不便于使用。这个时候就可以使用外观模式将这些子系统封装起来,提供一个统一而简单接口供客户端使用。当需要构建一个层次结构的子系统时,使用外观模式可以给子系统定义进入口。概述:外观模式主要依赖“迪米特法则”,即尽量减少与其他实体之间的联系。例如,用户和一台电脑。如果用户想开机,他不需要云单独打开电源,再启动CPU,再启动硬盘电源,再连接显示器。用户不需要知道电脑开机完成了 阅读全文
posted @ 2014-01-19 19:06 飞鹤0755 阅读(399) 评论(0) 推荐(0) 编辑
摘要:定义:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。类型:结构型模式。类图: 参入者:Component,抽象类,只是提供接口。Model,一个具体对象,实现接口完成一些基本的功能。Decorator,有一个指向Component的指针,并且实现了Componet的接口。Hairtician,Costumer,都是具体的装饰者,首先在实现基本的接口下,添加了新的功能。适用性:装饰模式其应用体现在装饰上。那些需要动态添加同类型功能的产品,都可以使用装饰模式。以添加新类的方式来给单个对象添加新装饰。当不能以子类的方式扩展时,可以使用装饰模式来扩展。 阅读全文
posted @ 2014-01-18 19:22 飞鹤0755 阅读(623) 评论(0) 推荐(0) 编辑
摘要:定义:组合模式(CompositePattern),将对象组合成树形结构以表示“部分—整体”的层次结构。“Composite”使得用户对单个对象和对组合对象的使用具有一致性。类型:结构型模式。类图:参与者:Computer,客户端,选择是否添加USB设备。USBDevice,所有USB设备的抽象类,提供USB设备的基本通信接口。USBMouse,单个对象,没有子部件。USBHub,也即Composite组合对象,可能存在多个子部件。适用性:无论是单个对象还是组合对象,用户都希望使用统一接口来控制,这种情况下适合组合模式。概述:组合模式给人的感觉很像树干树枝的结构,再一想,其实和USB拓扑结构图 阅读全文
posted @ 2014-01-14 19:07 飞鹤0755 阅读(567) 评论(0) 推荐(0) 编辑
摘要:定义:桥接模式(BridgePattern),将抽象部分与它的实现部分分离,使它们都可以独立地变化。类型:结构型模式。类图:参与角色:Clinet,客户指定组装电脑,指定了最初的接口。Computer,电脑抽象类,指定了具体安装CPU的接口。DesktopComputer,具体的台式机电脑,根据主板型号具体实现如何安装CPU。CPU,抽象类,指定连接CPU针脚的接口。Pentium,Core,具体的CPU,具体实现如何连续CPU的针脚。概述: CPU每年都在更新,尤其是像Pentium和Core这样两代产品架构的更新,直接导致整个电脑产业链的更新。例如,Pentium和Core架构下的CPU针 阅读全文
posted @ 2014-01-13 00:56 飞鹤0755 阅读(265) 评论(0) 推荐(0) 编辑
摘要:定义:适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。类型:结构型模式。适用性:你想使用一个已经存在的类,而它的接口不符合要求。你想创建一个可以复用的类,该类可以与其他接口不兼容的类协同工作。你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。可以使用对象适配器来适配它的父类接口。类图:参与角色:Client,与Target对象类同工作的客户端.Target,提供满足Client要求的接口.Adapter,Target的派生类,通过调用Adpatee提供的接口来实现目标接口。A 阅读全文
posted @ 2014-01-12 02:39 飞鹤0755 阅读(467) 评论(0) 推荐(0) 编辑
摘要:定义:原型模式(Prototype Pattern),用原型模式指定创建对象的种类,并且通过拷贝这些原型创建新的对象。类型:创建型模式。类图:参与角色:CPrototype,抽象原型基类,提供一个Clone的接口以及一些设置显示的接口。CConcretePrototype,声明定义原型的相关参数,并实现Clone接口,主要是通过实现拷贝构造函数来完成的。另外实现其他接口。Client,首先定义一个原型对象,然后以此为原型克隆新的对象。概述: 如果只是为了更快的完成新对象的生成,其实就没必要使用原型模式了。因为可以直接使用拷贝构造函数即可。而使用原型模式最重要的原因是隔离Client去了解具体的 阅读全文
posted @ 2014-01-10 15:18 飞鹤0755 阅读(309) 评论(0) 推荐(0) 编辑
摘要:定义: 建造者模式(Builder Pattern), 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。类型:创建型模式。类图:参与角色:Product,定义了一组产品的部件,并且有一个方法来表示对象。Builder,提供一系列Product对象每个部件构成的接口。BuilderA、BuilderB通过实现父类的接口来完成产品各部分的构造。Director,构造使用Builder接口的对象。概述: 产品的不同,是由具体的构建过程不同造成的,所以把每个产品不同的地方抽象出来。这样不同产品,就不需要用派生新的产品类来完成,只需要匹配不同的构建过程类即可。Builder只是 阅读全文
posted @ 2014-01-08 20:00 飞鹤0755 阅读(602) 评论(0) 推荐(1) 编辑
摘要:定义:单例模式(SingletonPattern),保证一个类仅有一个实例,并提供一个访问它的全局访问点。类型:创建型模式类图:概述:在很多比较大型的程序中,全局变量经常被用到。如果不用全局变量,那么在使用到的模块中,都需要用参数将全局变量传入,这是非常麻烦的。虽然要减少使用全局变量,但是如果需要,还是要用。单例模式就是对传统的全局的一种改进。单例可以做到延时实例化,即在需要的时候才进行实例化。针对一些大型的类,延时实例化是有好处的。需要注意的是,在C#,Java中,有饿汉单例模式(即在声明变量的时候就初始化)和懒汉模式(在需要使用的时候再初始化)。而在GoF的书中,只讲到了懒汉模式,这是因为 阅读全文
posted @ 2014-01-08 12:25 飞鹤0755 阅读(558) 评论(1) 推荐(0) 编辑
摘要:定义:抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需要指定它们具体的类。类型:创建型模式。类图:参与角色: 1. FeaturePhone、SmartPhone,分别是功能手机和智能手机的两个抽象类,分别抽象出来了功能机的制造流程,智能机的制造流程。 2. NokiaFeaturePhone、SamsungFeaturePhone,分别实现了功能机的制造流程。 3. NokiaSmartPhone、SamsungSamrtPhone,分别实现了智能机的生产制造流程。 4. Factory,抽象工厂,即手机生产厂所必须具备的基本要求都... 阅读全文
posted @ 2014-01-08 00:58 飞鹤0755 阅读(273) 评论(0) 推荐(0) 编辑