
设计模式
文章平均质量分 90
HingKwan
厦门,Java开发
展开
-
《设计模式》读书笔记——设计模式相关
读《设计模式——可复用面向对象软件的基础》时候做的笔记。下面的文字及图表基本上是该书的内容。什么是设计模式一个设计模式有4个基本要素:模式名称(pattern name)一个帮助记忆的词汇。用一两个词来描述模式的问题、解决方案和效果。设计模式允许我们在较高的抽象层次上进行设计。问题(problem)描述了应该在什么时候或者什么情况下使用该模式。它解释了设计问题和问题存在的前原创 2012-08-02 20:44:24 · 1062 阅读 · 0 评论 -
设计模式——模板方法
TEMPLATE METHOD模板方法1、 意图定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。2、 适用性在下面情况下可以使用Template Method模式一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。各子类中公共的行为应被提取出来并集中到一个公共类中原创 2012-09-19 23:18:55 · 747 阅读 · 0 评论 -
设计模式——策略模式
STRATEGY策略模式 1、 意图定义一系列的算法,把它们一个个封装起来,并且使它们可互相替换。本模式使得算法可独立于使用它的客户而变化。2、 适用性许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来匹配一个类的方法。需要使用一个算法的不同变体。算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。一个类定义了多种行为原创 2012-10-17 22:20:23 · 786 阅读 · 0 评论 -
设计模式——状态模式
STATE状态模式1、 意图允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。2、 适用性在下面情况下可以使用STATE模式一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。 一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。3、 结构4、 参与者原创 2012-11-11 14:34:41 · 677 阅读 · 0 评论 -
设计模式——备忘录模式
MEMENTO备忘录模式1、 意图在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。2、 适用性在下面情况下可以使用MEMENTO模式必须保存一个对象在某一时刻的(部分)状态,这样以后需要时它能恢复到先前的状态。 如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。原创 2012-11-12 23:11:55 · 763 阅读 · 0 评论 -
设计模式——享元模式
FLYWEIGHT享元模式1、 意图运用共享技术有效地支持大量细粒度的对象。2、 适用性在下面情况下可以使用FLYWEIGHT模式一个应用程序使用了大量的对象。完全由于使用大量的对象,造成很大的存储开销。对象的大多数状态都可变为外部状态。如果删除了对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。应用程序不依赖与对象标识。由于Flyweight对象可以被共享,原创 2012-11-21 23:46:56 · 688 阅读 · 0 评论 -
设计模式——解释器
INTERPRETER 解释器1、 意图给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。2、 适用性当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。而当存在以下情况时该模式效果最好:该文法简单对于复杂的文法,文法的类层次变得庞大而无法管理。此时语法分析程序生成器这样的工具是最好的原创 2012-11-22 23:21:09 · 1012 阅读 · 0 评论 -
设计模式——职责链
CHAIN OF RESPONSIBILITY责任链1、 意图使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿用这条链传递该请求,直到有一个对象处理它为止。2、 适用性在以下条件下使用responsibility链: 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。你想在不明确指定接收者的情况下,向多个原创 2012-12-05 23:00:57 · 800 阅读 · 0 评论 -
设计模式——装饰模式
DECORATOR 装饰模式 1、 意图动态地给一个对象添加一些额外的职责。就添加功能来说,Decorator模式就比生成子类更灵活。2、 适用性在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。处理那些可以撤销的职责。当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情原创 2012-11-25 16:03:50 · 703 阅读 · 0 评论 -
设计模式——桥接模式
BRIDGE桥接模式 1、 意图将抽象部分与它的实现部分分离,使它们都可以独立地变化。2、 适用性以下一些情况下使用Bridge模式: 你不希望在抽象和它的实现部分之间有一个固定的绑定关系。类的抽象以及它的实现都应该通过生成子类的方法加以扩充。这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。对一个抽象的实现部分的修改应对客户不产原创 2012-12-09 21:46:30 · 773 阅读 · 0 评论 -
设计模式——访问者
VISITOR访问者1、 意图表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。2、 适用性在下列情况下使用visitor模式:一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象原创 2012-12-13 23:47:35 · 972 阅读 · 0 评论 -
MVC模式基本理解
以下内容参考了《精通Java Web整合开发(JSP+Ajax+Struts+Hibernate)》和《自己动手写Struts——构建基于MVC的Web开发框架》里面的内容。概述MVC模式,即模型-视图-控制器(MVC,Model-View-Control)是一种交互界面的结构组织模型。模型(Model),代表的是应用的业务逻辑,包含应用程序的核心功能,它表示企业数据和业务规则原创 2013-08-03 11:17:10 · 2678 阅读 · 0 评论 -
设计模式——组合模式
COMPOSITE组合1、 意图将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。2、 适用性在下面情况下可以使用Composite模式 想表示对象的整体-部分层次结构希望用户忽略组合对象与单个对象的不同,用户将同一使用组合结构中的所有对象。3、 结构4、 参与者 Compo原创 2012-09-16 23:10:49 · 901 阅读 · 0 评论 -
设计模式——迭代器
ITERATOR 迭代 1、 意图提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。2、别名游标3、关键思想迭代器模式的关键思想就是将列表的访问和遍历从列表对象中分离出来并放入一个迭代器(iterator)对象中。迭代器类定义了一个访问该列表的接口。迭代器对象负责跟踪当前的元素:即,它知道哪些元素已经遍历过了。4、 适用性迭代器模式可用原创 2012-09-13 22:32:45 · 1345 阅读 · 0 评论 -
设计模式——建造模式
以下是读《设计模式——可复用面向对象软件的基础》的读书笔记。BUILDER生成器1、 意图将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。2、 适用性在以下情况下使用Builder模式 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。当构造过程必须允许被构造的对象有不同的表示时。3、 结构此模式结构如下图所示原创 2012-08-07 12:42:37 · 867 阅读 · 0 评论 -
设计模式——原型模式
以下是读《设计模式——可复用面向对象软件的基础》的读书笔记。PROTOTYPE 原型 1、 意图用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。2、 适用性当一个系统应该独立于它的产品创建、构成、表示时,要使用Prototype模式;当要实例化的类是在运行时刻制定时。例如,通过动态装载;为了避免创建一个与产品类层次平行的工厂类层次时; 当一个类的实例原创 2012-08-10 14:00:50 · 919 阅读 · 0 评论 -
设计模式——单例模式
以下是读《设计模式——可复用面向对象软件的基础》的读书笔记。SINGLETON 单例 1、 意图保证一个类仅有一个实例,并提供一个反问它的全局访问点。2、 适用性在下面情况下可以使用Singleton模式当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。原创 2012-08-10 15:50:55 · 1084 阅读 · 0 评论 -
设计模式——简单工厂
SIMPLE FACTORY简单工厂 1、 意图提供一个创建对象实例的功能,而无需关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。2、 适用性想要完全封装隔离具体实现,让外部只能通过接口来操作封装类,那么可以选用简单工厂。如果想要把对外创建对象的职责集中管理,可以选用工厂模式。一个简单的工厂可以创建很多的、不相关的对象,把这些集中起来管理。原创 2012-08-18 11:41:27 · 1025 阅读 · 0 评论 -
设计模式——工厂方法
以下是读《设计模式——可复用面向对象软件的基础》的读书笔记。FACTORY METHOD工厂方法 1、 意图定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。2、 别名虚构造器(Virtual Constructor)3、 适用性在下面情况下可以使用Factory Method模式:当一个原创 2012-08-08 15:50:56 · 1434 阅读 · 0 评论 -
设计模式——适配器
ADAPTER(适配器) 1、 意图将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。2、 别名包装器Wrapper3、 适用性你想使用一个已经存在的类,而它的接口不符合你的需求。你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协调工作。(仅适用于对象原创 2012-08-22 23:50:35 · 1082 阅读 · 0 评论 -
设计模式——代理模式
PROXY 代理 1、 意图为其他对象提供一种代理以控制对这个对象的访问。2、 适用性 需要为一个对象在不同的地址空间提供局部代表的时候,可以使用远程代理。需要按照创建开销很大对象的时候,可以使用虚代理。 需要控制原始对象的访问的时候,可以使用保护代理。需要在访问对象执行一些附加操作的时候,可以使用智能指引代理。3、 结构4、 参与者Proxy原创 2012-09-02 08:52:21 · 853 阅读 · 0 评论 -
设计模式——观察者
OBSERVER(观察者) 1、 意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。2、 别名依赖(Dependents),发布-订阅(Publish-Subscribe)3、 适用性当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。当对一个对原创 2012-09-02 20:05:13 · 1042 阅读 · 0 评论 -
设计模式——外观模式
FACADE 外观模式1、 意图为子系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这一接口使得这一子系统更加容易使用。2、 适用性在遇到以下情况时使用:当你要为一个复杂子系统提供一个简单接口时。客户程序与抽象类的实现部分之间存在着很大的依赖性。当你需要构建一个层次结构的子系统时,使用façade模式定义子系统中每层的入口。3、 结构原创 2012-08-24 23:10:53 · 1075 阅读 · 0 评论 -
设计模式——中介者
MEDIATOR 中介者 参考《设计模式——可复用面向对象软件的基础》和《研磨设计模式》的读书笔记。1、 意图用一个中介者对象来封装一系列的对象交互。中介者使其各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立改变它们之间的交互。2、 适用性一组对象以定义好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。一个对象引用其他很对对象并且直接与这些对象通信,原创 2012-08-25 15:04:51 · 1201 阅读 · 0 评论 -
设计模式——命令模式
COMMAND 命令 1、 意图将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排列或记录请求日志,以及支持可撤销的操作。2、 别名动作(Action)、事务(Transaction)3、 适用性抽象出呆执行的动作以参数化某对象。可以用语言中的回调(callback)函数表达这种参数化机制。Command模式是回调机制的一个面向对象的替代品。原创 2012-09-06 22:38:32 · 820 阅读 · 0 评论 -
设计模式——抽象工厂模式
以下是读《设计模式——可复用面向对象软件的基础》的读书笔记。ABSTRACT FACTORY抽象工厂 1、 意图提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。2、 别名Kit3、 适用性在以下情况可以使用Abstract Factory模式一个系统要独立于它的产品的创建、组合和表示时 一个系统要由多个产品系列中的一个来配置时当你要强原创 2012-08-06 20:34:54 · 932 阅读 · 0 评论