
DesignPattern
水桶妖
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
2.工厂方法模式(Factory Method)
定义:定义一个用于创建对象的接口,让子类来决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。它是简单工厂模式的一种延伸。 例子:Spring中ApplicationContext的getBean方法就是典型的工厂方法模式。 工厂方法的通用代码: 产品抽象类 package _2FactoryMethodPattern;public abst...原创 2012-10-25 11:12:16 · 137 阅读 · 0 评论 -
15.组合模式(Composite Pattern)
1.定义将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。组合模式又叫做树形模式。其在项目开发中涉及树的结构都会想到组合模式。 2.引子我们计算机的文件系统就是一个典型组合模式的使用,文件分为两种:一、文件夹,二、文件。其中文件夹可以包含文件,也可以包含子文件夹。如果我们用资源管理器打开某个文件夹,发现它展开在左侧的是一个树形结构...原创 2012-11-13 17:35:15 · 129 阅读 · 0 评论 -
16.观察者模式(ObserverPattern)
1.定义定义对象之间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并自动更新观察者模式也叫发布订阅模式 2.观察者模式的使用场景关联行为场景。需要注意的是,关联行为是可拆分的,而不是“组合”关系。也就是说观察者的生命周期不由被观察者管理。事件多级触发场景。跨系统的消息交换场景,如消息队列的处理机制。相信大家都看过无间道,那么应该对...原创 2012-11-14 16:08:31 · 128 阅读 · 0 评论 -
17.门面模式(FacadePattern)
1.定义要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。门面模式注重“统一的对象”,也就是提供一个访问子系统的接口,除了这个接口不允许有任何访问子系统的行为发生。门面对象是外界访问子系统内部的唯一通道,不管子系统内部是多么杂乱无章,只要有门面在,就可以做到“金玉其外败絮其中”。 2.门面模式的使用场景 为一个复杂的...原创 2012-11-15 15:23:27 · 127 阅读 · 0 评论 -
18.备忘录模式(Memento Pattern)
引子俗话说:世上难买后悔药。所以凡事讲究个“三思而后行”,但总常见有人做“痛心疾首”状:当初我要是……。如果真的有《大话西游》中能时光倒流的“月光宝盒”,那这世上也许会少一些伤感与后悔——当然这只能是痴人说梦了。但是在我们手指下的程序世界里,却有的后悔药买。今天我们要讲的备忘录模式便是程序世界里的“月光宝盒”。所谓备忘录模式就是在执行某个命令之前先将当前状态备份,执行完,在某种情况下需...原创 2012-11-16 15:01:52 · 147 阅读 · 0 评论 -
19.访问者模式(Visitor Pattern)
话说有一个银行,有三个窗口,但是每个窗口的智能都是一样的,即都能办理所有的业务。因此每位来银行办理业务的人只要排队就是了,排到你了,就向业务员说明你要办理的业务,然后业务员根据你的业务选择不同的单据,打开不同的账本…… 业务员此时典型的工作流程是: if (service instanceof Saving){ //存款 ........原创 2012-11-19 16:28:25 · 134 阅读 · 0 评论 -
20.状态模式(State Pattern)
1.定义当一个对象内在状态改变时,允许其改变行为,这个对象看起来像改变了其类。状态模式的核心是封装。 2.要解决的问题-过多的if-else状态判断对象如何在每一种状态下表现出不同的行为?在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理。最直接解决方案是将这些所有可能发生的情况全都考虑到。然后使用if... ellse语句来做状态判断来进行不同情况的处理。但是对复杂...原创 2012-11-22 14:02:07 · 144 阅读 · 0 评论 -
21.解析器模式(Interpreter Pattern)
1.定义给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。属于行为类模式。 2.解释器模式的使用场景重复发生的问题可以使用解释器模式:比如根据用户输入的公式进行加减乘除四则运算,但是他们输入的公式每次都不同,有时是a+b-c*d,有时是a*b+c-d,等等等等个,公式千变万化,但是都是由加减乘除四个非终结符来连接的,这时我们就可以使用...原创 2012-11-23 14:29:59 · 240 阅读 · 0 评论 -
22.享元模式(Flyweight Pattern)
1.定义使用共享对象可有效地支持大量的细粒度的对象。是对象池技术的重要实现方式。 2.享元模式的使用场景系统中存在大量的相似对象。细粒度的对象都具备较接近的外部状态,而且内部状态与环境无关,也就是说对象没有特定身份。需要缓冲池的场景。请看例子程序,学生和学校的关系: package _22FlyweightPattern;/** * 班级类...原创 2012-11-26 14:55:01 · 128 阅读 · 0 评论 -
23.桥梁模式(Bridge Pattern)
1.定义将抽象和实现解耦,使得两者可以独立地变化 2.例子定义看不明白?没关系,我将通过下面这个例子来阐述桥梁的概念。 小时候我们都用蜡笔画画,一盒蜡笔12种颜色。一开始我都是用最小号的蜡笔画个太阳公公、月亮婆婆足够了。后来开始画一些抽象派的作品,就得换中号的了,要不然画个背景都要描半天,好一盒中号的也是12种颜色。再后来我开始转向豪放派,中号就有些捉襟见肘了,只好换大号的...原创 2012-11-26 17:09:04 · 179 阅读 · 0 评论 -
设计模式代码-仅供参考
学完设计模式,示例代码保存着,以后看看。原创 2012-11-26 17:13:46 · 115 阅读 · 0 评论 -
14.迭代器模式(Iterator Pattern)
1.定义提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。目前是一个没落的模式,基本上没人会单独写一个迭代器,除非是产品性质的开发。 2.类型行为类模式 3.类图 4.迭代器模式的使用场景迭代器模式是与集合共生共死的,一般来说,我们只要实现一个集合,就需要同时提供这个集合的迭代器,就像java中的Collection,List、Set、...原创 2012-11-13 14:27:45 · 118 阅读 · 0 评论 -
13.适配器模式(Adapter Pattern)
1.定义将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式又叫做变压器模式。 2.适配器模式的应用场景适配器模式应用的场景只要记住一点就足够了:你有动机修改一个已经投产中的接口时,适配器模式可能是最适合你的模式。比如系统扩展了,需要使用一个已有或新建立的类,但这个类又不符合系统的接口,怎么办?使用适配器模式。...原创 2012-11-12 17:24:21 · 155 阅读 · 0 评论 -
3.抽象工厂模式(Abstract Factory)
一、简介定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。 为了方便引进抽象工厂模式,引进一个新概念:产品族(Product Family)。所谓产品族,是指位于不同产品等级结构,功能相关联的产品组成的家族。如图: 图中一共有四个产品族,分布于三个不同的产品等级结构中。只要指明一个产品所处的产品族以及它所属的等级结构,就可以唯一的确定这...原创 2012-10-25 12:00:41 · 157 阅读 · 0 评论 -
4.模板方法模式(Template Method Pattern)
定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 例子:继承Thread实现一个多线程类时,我们重写了run方法,然后调用start方法,start方法定义在父类中,会调用子类中的run方法,是模板方法模式的典型应用。 特点:把不变的行为搬到超类,去除子类中重复的代码来体现他的优势。 ...原创 2012-10-25 16:33:22 · 83 阅读 · 0 评论 -
5.建造者模式(Builder Pattern)
1.定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 2.注意事项:建造者模式关注的是零件类型和装配工艺(顺序),这是它与工厂方法模式最大不同的地方,虽然同为创建类模式,但是注重点不同。建造者模式和工厂方法模式非常相像,以下是它们之间的区别:建造者模式最主要的功能是基本方法的调用顺序安排,也就是这些基本方法已经实现了,通俗的讲就是零件的装...原创 2012-10-26 17:06:33 · 131 阅读 · 0 评论 -
6.代理模式(Proxy Pattern)
1.定义:为其他对象提供一种代理以控制这个对象的访问。代理模式也叫委托模式,它是一项基本设计技巧。许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了代理模式。 2.代理模式的三个角色定义:Subject抽象主题角色:抽象主题类可以是抽象类,也可以是接口,是一个最普通的业务类型定义,无特殊要求。RealSubject具体主题角色:也叫被委托角色、被...原创 2012-10-30 16:09:55 · 142 阅读 · 0 评论 -
7.原型模式(Prototype Pattern)
1.定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式的核心是一个clone方法,通过该方法进行对象的拷贝(注意浅拷贝和深拷贝的区别)。 2.原型模式的使用场景:资源优化场景:类初始化需要消耗非常多的资源,这个资源包括数据、硬件资源等。性能和安全要求的场景:通过new产生一个对象需要非常繁琐的数据准备或访问权限。一个对象多个修改者的场景:一...原创 2012-11-01 10:54:23 · 118 阅读 · 0 评论 -
8.中介者模式(Mediator Pattern)
1.定义:用一个中介对象封装一系列的对象交互,中介者使个对象不需要显示的相互作用,从而使其耦合松散,而且可以独立地改变他们之间的交互。 2.解析:这段话不明白没关系,我们先来看这样的一个场景:公司有1个领导,9个职员,有一天领导要去公司的图书馆找一本书,领导一看图书馆的这本书已经被借走了,他就去问职员1有没有拿走,如果没有就继续问职员2……终于领导找到了他想看的书。在这个例...原创 2012-11-01 15:57:44 · 139 阅读 · 0 评论 -
9.命令模式(Command Pattern)
1.定义将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式属于行为模式。 2.命令模式的使用场景只要我们认为是命令的地方就可以采用命令模式,比如在GUI开发中,一个按钮的点击是一个命令;触发-反馈机制的处理等。 3.命令模式的三个角色Receive接收者角色:该角色就是干活的角色,命令...原创 2012-11-07 14:45:02 · 190 阅读 · 0 评论 -
10.责任链模式(Chain of Responsibility)
1.定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。责任链模式是一种对象的行为模式。 2.通用代码这个模式很简单,也许看完通用代码就能理解了:package _10ChainOfResponsibility;public abstract class Handler ...原创 2012-11-07 16:15:57 · 125 阅读 · 0 评论 -
11.装饰模式(Decorator Pattern)
1.定义动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更灵活。 2.装饰模式的使用场景需要扩展一个类的功能,或给一个类增加附加功能需要动态地给一个对象增加功能,这些功能可以动态的撤销需要为一批的兄弟类进行改装或者加装功能,当然是首选装饰模式3.例子我买了一辆车,这辆车会跑。那么用代码抽象上面这句话就成了这样: package...原创 2012-11-08 15:57:20 · 121 阅读 · 0 评论 -
12.策略模式(Strategy Pattern)
1.定义定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式是一种比较简单的模式,也叫做政策模式。 2.策略模式的使用场景多个类只有在算法或行为上有不同的场景算法需要自由切换的场景需要屏蔽算法规则的场景下面看一个例子:zip和gzip文件格式相信大家都很熟悉,它们是两种不同的压缩格式,我们今天就来对一个目录或文件实现两种不同的压缩格式。 ...原创 2012-11-12 13:51:08 · 159 阅读 · 0 评论 -
1.单例模式(Singleton)
package _1Singleton;public class Singleton { private static Singleton singleton = new Singleton(1); private Singleton(int i) { System.out.println(i); } /** * Solution 1 ...原创 2012-10-11 13:37:02 · 95 阅读 · 0 评论