设计模式
lovezyj
这个作者很懒,什么都没留下…
展开
-
策略模式
策略模式(Strategy Pattern)属于行为型模式,其中体现了两个基本面向对象设计的基本原则: [b]1,封装;2,接口.[/b] 他的实现需要:一个接口,多个具体实现该接口的类,一个环境,一个客户端。 [b]优点:[/b] 1、 提供了一种替代继承的方法,而且既保持了继承的优点(代码重用)还比继承更灵活(算法独立,可以任意扩展)。 2、 避免程序中使用多重条...原创 2010-05-07 16:26:30 · 83 阅读 · 0 评论 -
组合模式
组合模式(Composite Pattern)有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 组合模式让你可以优化处理递归或分级数据结构。有许多关于分级数据结构的例子,使得组合模式非常有用武之地。关于分级数据结构的一个普遍性的例子是你每次使用电脑时所遇到的:文件系统。文...原创 2010-05-12 22:58:53 · 73 阅读 · 0 评论 -
观察者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,让他们能够自动更新自己。 观察者模式的组成 1.抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类或接口来实现 2.抽象观察者角色:为所有具体的观...原创 2010-05-13 01:22:35 · 77 阅读 · 0 评论 -
责任链模式
Chain of Responsibility(CoR) 是用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合,唯一共同点是在他们之间传递request. 也就是说,来了一个请求,A类先处理,如果没有处理,就传递到B类处理,如果没有处理,就传递到C类处理,就这样象一个链条(chain)一样传递下去。 1) 抽象处理者角色(Handler):它定义了一个处理请求...原创 2010-05-13 13:50:45 · 92 阅读 · 0 评论 -
访问者模式
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的 新操作。 1) 访问者角色(Visitor):为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色。这样访问者就可以通过该元素角色的特定接口直接访问它。 2) 具体访问者角色(Concrete Visitor):实现每个由访问者...2010-05-13 15:15:49 · 80 阅读 · 0 评论 -
状态模式
State的定义: 不同的状态,不同的行为;或者说,每个状态有着相应的行为. State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elseif else 进行状态切换, 如果针对状态的这样判断切换反复出现,我们就要联想到是否可以采取State模式了. 不只是根据状态,也有根据属性.如果某个对象的属性不同,对象的行为就不一样,这点在数据库系统中出现频率比较高,我们经常会...原创 2010-05-13 17:20:20 · 81 阅读 · 0 评论 -
原型模式
原型模式(Prototype): 用原型实例指定创建对象的种类,并且通过拷贝原型来创建新的实例对象。它允许一个对象再创建另外一个可定制的对象,根本无需知道任何创建细节,工作原理,通过将一个原型对象传给那个要发动创建的对象,这个发动创建对象通过请求原型对象拷贝它们自己来创建。 通俗点,就是通过拷贝来进行创建实例。 原型模式适合在什么场景使用?一是类初始化需要消化非常多的资源,这个资源包括数据、硬...2010-05-13 19:24:22 · 96 阅读 · 0 评论 -
中介者模式
Mediator Pattern 用一个调停对象来封装一系列的对象交互。调停者使 各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个“调停”对象,使得 两头的对象分别和“调停”对象引用或者依赖。 当然并不是所有的对象都需要加入“调停”对象。如果对象之间的关系原本一目了然,调 停对象的加入便是...原创 2010-05-14 11:07:06 · 74 阅读 · 0 评论 -
解释器模式
Interpreter,解释器模式描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发 编译器中;在实际应用中,我们可能很少碰到去构造一个语言的文法的情况。 解释器模式的定义如下:定义语言的文法,并且建立一个解释器来解释该语言中的句子。 它属于类的行为模式。这里的语言意思是使用规定格式和语法的代码。 在GOF 的书中指出:如果一种特定类型的问题发生的频率足够高,那么可能就值得...原创 2010-05-14 11:33:13 · 78 阅读 · 0 评论 -
备忘录模式
memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态. 第一种就是采用两个不同的接口类来限制访问权限。这两个接口类中,一个提供比较完 备的操作状态的方法,我们称它为宽接口;而另一个则可以只是一个标示,我们称它为窄接 口。备忘录角色要实现这两个接口类。这样对于“备忘发起角色”采用宽接口进行访问,而 对于其他的角色或者对象则采用窄接口进行访问。...原创 2010-05-14 11:49:14 · 82 阅读 · 0 评论 -
迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。 访问一个聚合对象的内容而无需暴露它的内部表示。 支持对聚合对象的多种遍历。 为遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代)。 [img]http://www.lvjiyong.com/books/DesignPatterns/32.files/image019.jpg[/img] ...原创 2010-05-12 19:41:46 · 72 阅读 · 0 评论 -
装饰模式
Decorator pattern 装饰模式是用于对象的创建,而此对象的创建基于原来对象的加强,也就是通过原组件对象的参数传递,把此对象层层加强。 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。 二.组成部分: 1. 抽象构件:原始的功能接口 2. 具体构件:具体的原始功能类 3. 装饰角色:持有具体构...原创 2010-05-12 19:29:49 · 64 阅读 · 0 评论 -
代理模式
[b]定义[/b] 代理模式(Proxy Pattern), 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下 ,一个客户不 想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 代理模式一般涉及到的角色有: 抽象角色 :声明真实对象和代理对象的共同接口; 代理角色 :代理对象角色内部含有对真实对象的引用...原创 2010-05-10 18:22:35 · 81 阅读 · 0 评论 -
单例模式
[b]主类:[/b][code="java"] public class TheKing { private static TheKing king = null; private TheKing() { } public static TheKing getInstance() { if (king == null) { king = new TheKin...原创 2010-05-10 23:53:53 · 97 阅读 · 0 评论 -
工厂模式
通常来讲,工厂模式分为:简单工厂模式,工厂方法模式和抽象工厂模式。 简单工厂模式定义一个factory类,来根据要求,创建不同的对象。有人说这种模式当有了新一种产品的时候,就要修改factory类,违反了OCP原则。但我感觉如果client传递对应的class的话,可以避免这个弊端。例如: [code="java"] public interface Product { } pu...原创 2010-05-11 10:55:19 · 78 阅读 · 0 评论 -
门面模式
[b]Facade外观模式: [/b] 为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口,使子系统更加容易使用。 [b]为什么要使用门面模式: [/b] 一般而言子系统和其他子系统之间,客户端和实现层之间存在这很大的依赖性,引入Facade模式将一个子系统与它的客户端以及其他的子系统分离,可以提高子系统的独立性和可移植行. 在构建一个层次...原创 2010-05-11 14:39:47 · 75 阅读 · 0 评论 -
适配器模式
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 [b]意图:[/b] 你想使用一个已经存在的类,而它的接口不符合你的需求。 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。 (仅适用于对象A d a p t e r )你想使用一些已经存在的子类,但...原创 2010-05-11 16:58:09 · 72 阅读 · 0 评论 -
模板模式
模板方法(Template Method)模式属于行为模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这里的算法的结构,可以理解为你根据需求设计出来的业务流程。特定的步骤就是指那些可能在内容上存在变数的环节。 [img]http://tech.ccidnet.com/col/attachment/2009/10/1...原创 2010-05-11 22:19:22 · 75 阅读 · 0 评论 -
建造者模式
Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。 [img]http://b17.photo.store.qq.com/http_imgload.cgi?/rurl4_b=771023a10a231...原创 2010-05-11 23:27:48 · 85 阅读 · 0 评论 -
桥梁模式
桥梁(Bridge)模式 桥梁模式是一个非常有用的模式,也是比较复杂的一个模式。熟悉这个模式对于理解面向对象的设计原则,包括"开-闭"原则(OCP)以及组合/聚合复用原则(CARP)都很有帮助。理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格。 在提出桥梁模式的时候指出,桥梁模式的用意是"将抽象化(Abstraction)与实现化(Implementation)脱耦,使得...原创 2010-05-12 01:01:13 · 83 阅读 · 0 评论 -
命令模式
命令模式: 将请求封闭成对象,这可以让你使用不同的请求,队列.或者日志请求来参数化其他对象.命令模式式可支持撤销技术操作. 好处: ◆很容易构造一个命令队列 ◆记录相关的命令日志 ◆增加命令的状态,实现命令的撤销和重做 ◆允许接受请求的一方决定是否可做 ◆新的命令轻而易举可以加入其中 缺点:可能会有过多的具体命令类存在 实现: 也不难,第一步...原创 2010-05-12 18:02:08 · 71 阅读 · 0 评论