
设计模式
文章平均质量分 76
figo_2009
这个作者很懒,什么都没留下…
展开
-
外观模式
GOF《设计模式》一书对Facade模式是这样描述的: 为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口,使子系统更加容易使用。 大致意思是说:使用一种比原有方式更简单的办法与系统交互。例如, 我们把一个很文件的文件,放在了第二抽屉里,而第二个抽屉的钥匙放在了第一个抽屉里,我们要想取出这个文件,第一步肯定要拿到第一个抽屉的钥匙,然后打开...原创 2011-02-21 17:04:35 · 81 阅读 · 0 评论 -
原型模式
原型模式(Prototype Pattern) 前面的几种模式中,我们使用了不同的构造方法(各种Factory或者Builder)去代替或者说掩盖Java语言之中“new”这个操作来创建对象实例。Java中要创建一个新的对象并不一定只能靠“new”这个关键字的,我们还有“clone()”。 在接触原型模式之前,我们先来了解一下克隆一些知识: 1.clone()方法...原创 2011-02-21 17:21:10 · 102 阅读 · 0 评论 -
原型模式Prototype(深拷贝)
1、定义:原型模式就是通过一个原型对象来表明要创建的对象类型,然后用复制这个对象的方法来创建更痛类型的对象。 2、原理:有两部分组成,抽象原型和具体原型。 3、使用时机:系统需要 创建吃的对象是动态加载的,而且产品具有一定层次时,可以考虑使用原型模式。 1>当要实例化的类是在运行时刻指定时,例如,通过动态装载; 2>或者为了避免创建一个与产品类层次平行的工厂类层次时; ...原创 2011-02-21 17:21:54 · 168 阅读 · 0 评论 -
备忘录
备忘录(Memento Pattern)模式 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。 备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化 存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使...原创 2011-02-21 17:22:16 · 108 阅读 · 0 评论 -
备忘录模式 (下)
一、什么是备忘录模式 Memento模式也叫备忘录模式,是行为模式之一,它的作用是保存对象的内部状态,并在需要的时候(undo/rollback)恢复对象以前的状态。 二、备忘录模式的应用场景 如果一个对象需要保存状态并可通过undo或rollback等操作恢复到以前的状态时,可以使用Memento模式。 1)一个类需要保存它的对象的状态(相当于Origina...原创 2011-02-21 17:22:43 · 97 阅读 · 0 评论 -
模板模式
模板方法(Template Method)模式是GOF设计模式中最为常见几个模式之一。现在流行的很多框架中(如Spring,struts等),我们都可以看到模板方法模式的广泛应用。模板方法模式主要应用于框架设计中,在日常的应用设计中也被经常使用。 可是,我们在运用模板方法模式来解决我们的需求而进行设计时,往往忽略了一些非常重要的细节。保证架构逻辑的正常执行,不被子类破坏;怎么让子类扩展模...原创 2011-02-21 17:23:06 · 132 阅读 · 0 评论 -
状态模式
1,状态模式允许一个"对象"在其内部状态改变的时候改变其行为。2,状态模式的角色:抽象状态,具体状态(一般是几个,每一个状态下有不同的行为,),环境(context)角色(就是对象,什么对象的状态,一般该对象要初始化一个状态,还有改变状态,还有该状态下的行为)我们打篮球的时候运动员可以有正常状态,不正常状态,和超常状态,现在我们就以我们打篮球时候投篮时候的状态来举例子,首先...原创 2011-02-21 17:23:28 · 108 阅读 · 0 评论 -
策略模式
当我们掌握了Java的语法,当我们了解了面向对象的封装、继承、多态等特性,当我们可以用Swing、Servlet、JSP技术构建桌面以及 Web应用,不意味着我们可以写出面向对象的程序,不意味着我们可以很好的实现代码复用,弹性维护,不意味着我们可以实现在维护、扩展基础上的代码复用。 一把刀,可以使你制敌于无形而于江湖扬名,也可以只是一把利刃而使你切菜平静。Java,就是这把刀,它的威力取决于你使用...原创 2011-02-21 17:23:51 · 104 阅读 · 0 评论 -
命令模式
1.意图: 将一个请求或操作封装到对象中。 2.类图: 3.原理: 命令模式是对命令的封装,命令模式把发出命令的责任和执行命令的责任分割开。 每个命令都是一个操作:请求方发出请求要求执行一个操作,接收方收到请求并执行操作。命令模式允许请求方和接收方独立开来,使得请求方不必知道接收方的接口以及操作如何被执行。 4...原创 2011-02-21 17:24:12 · 116 阅读 · 0 评论 -
解释器模式
一、引子 其实没有什么好的例子引入解释器模式,因为它描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中;在实际应用中,我们可能很少碰到去构造一个语言的文法的情况。 虽然你几乎用不到这个模式,但是看一看还是能受到一定的启发的。 二、定义与结构 解释器模式的定义如下:定义语言的文法,并且建立一个解释器来解释该语言中的句子。它属于类的行为模...原创 2011-02-21 17:24:41 · 110 阅读 · 0 评论 -
装饰器模式
浅谈装饰器模式 序: 今天,为了满足我们项目组长的愿望,硬非要把一个简单的一个接口实现函数,扩展为装饰器模式进行处理。据说可以 在以后扩展的时候很有好处。于是乎,我今儿就大学了一把装饰器模式,下面我就谈谈自己的理解吧。 正文---开整: 装饰器模式,顾名思义就是给类或者接口进行装饰的模式。模式这玩意说白了就是把一些浅显易懂的东西,冠以很高深 的名词,让人摸不着头脑,...原创 2011-02-21 17:25:06 · 119 阅读 · 0 评论 -
迭代器模式
【迭代器模式】 迭代器可以顺序访问一个聚集中的元素而不必显露聚集的内部对象。多个对象聚在一起形成的总体称为聚集,聚集对象是能够包容一组对象的容器对象。迭代器模式 将迭代逻辑封装到一个独立的对象中,从而与聚集本身隔开。迭代算法独立于聚集对象,修改迭代算法不会对聚集对象产生任何影响,实现程序的松耦合。 1.Aggregate接口所声明的方法只有iterator方法一个,这是为了建立一个对对...原创 2011-02-21 17:25:30 · 81 阅读 · 0 评论 -
抽象工厂模式
假如你要制作一个对话框控件,你希望这个对话框可以有不同的Look&Feel,最基本的想法是,使用setter将不同的Look&Feel注入到这个对话框,例如: CustomDialog.java Java代码 1. public class CustomDialog { 2. private IButton button; 3. private ITex...原创 2011-02-21 17:20:33 · 108 阅读 · 0 评论 -
工厂方法模式
1、工厂模式的核心思想及分类 工厂方法模式的作用是负责实例化同一个接口的多个类。工厂方法模式的意义是定义一个创建产品对象的工厂类,由该工厂统一创建继承了同一个接口的多个产品对象。 工厂方法可以分为三个子类型: • 工厂方法模式(Factory Method):最基本的工厂模式; • 多个工厂方法模式:对工厂方法模式的扩展; ...原创 2011-02-21 17:20:04 · 164 阅读 · 0 评论 -
组合模式
本文从一个给定的实现了组合(Composite)模式的例子开始,说明怎么在 这个数据结构上实现业务逻辑代码。依次介绍了非面向对象的方式、在组合结构中加入方法、使用访问者(Visitor)模式以及用改进后的访问者 (Visitor)模式来实现相同的业务逻辑代码,并且对于每种实现分别给出了优缺点。读者定位于具有Java程序开发和设计模式经验的开发人员。读者通过本文可以学到如何在组合(Com...原创 2011-02-21 17:05:38 · 106 阅读 · 0 评论 -
桥接模式
意图将抽象部分与它的实现部分分离,使它们都可以独立地变化。(GoF)*可以去看JDBC的源代码场景现在我们有很多表要处理,同时又有很多操作要做。最简单的做法是在一个类里做完所有的操作,如我们在EJB服务器端的实现中进行JDBC操作。可是这样一来这个类将无比巨大,大到四只眼(眼睛兄)都看不过来!有什么好办法能够降低这样操作的杂乱性呢?我们注意到这里有两个概念,分别是“表单(T...原创 2011-02-21 17:06:16 · 76 阅读 · 0 评论 -
中介者模式
1 解决问题一群平级的对象要互相调用(通信),于是系统变得杂乱无章的网状 因此设置一个中心节点,把网状变成星型,由中心节点控制协调。此时中心节点就叫中介者 2 解决方法一个抽象中介者一个抽象通信者一个具体中介者,它里面有各个具体通信者对象,并有一个协调的方法send()供大家调用(例如,供a调用,然后触发b、c的exe()时间、供b调用,触发c、d的exe()事件)...原创 2011-02-21 17:06:47 · 112 阅读 · 0 评论 -
多线程下的单例模式
概要单例模式是最简单的设计模式之一,但是对于Java的开发者来说,它却有很多缺陷。在本月的专栏中,David Geary探讨了单例模式以及在面对多线程(multithreading)、类装载器(classloaders)和序列化 (serialization)时如何处理这些缺陷。单例模式适合于一个类只有一个实例的情况,比如窗口管理器,打印缓冲池和文件系统,它们都是原型的例子。典型的情况...原创 2011-02-21 17:07:20 · 119 阅读 · 0 评论 -
多线程下的单例模式(上)
Abstract 在开发中,如果某个实例的创建需要消耗很多系统资源,那么我们通常会使用惰性加载机制,也就是说只有当使用到这个实例的时候才会创建这个实例,这个好处在单例模式中得到了广泛应用。这个机制在single-threaded环境下的实现非常简单,然而在multi-threaded环境下却存在隐患。本文重点介绍惰性加载机制以及其在多线程环境下的使用方法。(作者number...原创 2011-02-21 17:07:58 · 128 阅读 · 0 评论 -
观察者模式
size=9] 论坛上很多人都讲设计模式,也讲了很多设计模式,现在也来说说我对一些设计模式的理解,对于一些简单的模式就不多说了,一切都在我以前写的例子中使用到了,比如说在velocity和freemarker的比较那篇文章里用到了单例,工厂,方法模板,在java邮件,在简单和复杂之间那篇文章里用到了策略,适配,在easywebwork中也使用了几种设计模式,在哪些文章我没有对设计模式进行详细的讲解...原创 2011-02-21 17:17:12 · 94 阅读 · 0 评论 -
代理模式
代理模式:给某一对象提供代理对象,并由代理对象控制具体对象的引用. 代理,指的就是一个角色代表另一个角色采取行动,就象生活中,一个红酒厂商,是不会直接把红酒零售客户的,都是通过代理来完成他的销售业务的.而客户,也不用为了喝红酒而到处找工厂,他只要找到厂商在当地的代理就行了,具体红酒工厂在那里,客户不用关心,代理会帮他处理. 代理模式涉及的角色: 1:抽象主题角色.声明了代理主题...原创 2011-02-21 17:17:43 · 104 阅读 · 0 评论 -
责任链模式
责任链模式(Chain of Responsibility) 感觉这种模式很有用的,深入学习学习。。。。 一、引言 初看责任链模式,心里不禁想起了一个以前听过的相声:看牙。说的是一个病人看牙的时候,医生不小心把拔下的一个牙掉进了病人嗓子里。病人因此楼上楼下的跑了好多科室,最后无果而终。 责任链模式就是这种“推卸”责任的模式,你的问题在我这里能解决我就解决,不行就把你推给另一...原创 2011-02-21 17:18:12 · 105 阅读 · 0 评论 -
亨元模式
翻译为亨元模式,或直译为轻量级模式。所谓亨元,就是被其它对象共享使用的 对象。通过这种方式,系统减少了内存的占用。比如一个系统有一个成百上千、 成千上万的小对象,这些小对象可能拥有着共同的信息,那么这些共同的信息就 没有必要也重复成千上万次。把这些共同信息抽取出来,形成一个对象,即是亨 元。这些成千上万的其它对象只需要引用这个亨元即可。 举个例子,在棋类程序中,有时候我们会...原创 2011-02-21 17:18:37 · 187 阅读 · 0 评论 -
构造者模式
多种设计模式能够解决普通构造器不能解决的问题。1.普通构造的挑战: 突破题1:请列出Java构造器关于使用和行为的4条规则。 答:(1)如果开发者没有为类提供构造器,那么Java将会为该类提供默认的构造器. (2)构造器的名字必须与类名相同。因而,构造器名字通常与其他方法名字不同,它的名字是以大写字母开头。这一点看起来有些怪异。 (3)构造器可以使用...原创 2011-02-21 17:19:04 · 123 阅读 · 0 评论 -
生成器模式
实际上,既然Builder和Factory同属创建型模式,那么他们的最大共同点就在于都可以创建类对象, 在这点上,不光这两个模式一样,其它创建型模式也一样。但正如在《深入探索Factory模式与Prototype模式的异同(续)》一文中所说,这些模 式,功能上的相似,只是“形似而非神似”。既然这样,那好,下面就让我们能看看Builder和Factory在功能的相似上,存在哪些神韵方面的差别。 ...原创 2011-02-21 17:19:30 · 115 阅读 · 0 评论 -
访问者模式
话说有一个银行,有三个窗口,但是每个窗口的智能都是一样的,即都能办理所有的业务。因此每位来银行办理业务的人只要排队就是了,排到你了,就向业务员说明你要办理的业务,然后业务员根据你的业务选择不同的单据,打开不同的账本。……。 业务员此时典型的工作流程是:if (service instanceof Saving){ //存款 ......}else if (serv...原创 2011-02-21 17:25:52 · 116 阅读 · 0 评论