JAVA设计模式
文章平均质量分 88
ai92
这个作者很懒,什么都没留下…
展开
-
深入浅出工厂模式
一、引子 话说十年前,有一个暴发户,他家有三辆汽车——Benz奔驰、Bmw宝马、Audi奥迪,还雇了司机为他开车。不过,暴发户坐车时总是怪怪的:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上Audi说“开奥迪车!”。你一定说:这人有病!直接说开车不就行了?! 而当把这个暴发户的行为放到我们程序设计中来时,会发现这是一个普遍存在的现象。幸运的是,这原创 2004-12-08 15:02:00 · 59189 阅读 · 46 评论 -
深入浅出迭代器模式
一、 引言迭代这个名词对于熟悉Java的人来说绝对不陌生。我们常常使用JDK提供的迭代接口进行java collection的遍历:Iterator it = list.iterator();while(it.hasNext()){ //using “it.next();”do some businesss logic}而这就是关于迭代器模式应用很好的例子。 二、 定义与结构迭代器原创 2005-07-27 21:19:00 · 4366 阅读 · 1 评论 -
深入浅出备忘录模式
一、引子俗话说:世上难买后悔药。所以凡事讲究个“三思而后行”,但总常见有人做“痛心疾首”状:当初我要是……。如果真的有《大话西游》中能时光倒流的“月光宝盒”,那这世上也许会少一些伤感与后悔——当然这只能是痴人说梦了。但是在我们手指下的程序世界里,却有的后悔药买。今天我们要讲的备忘录模式便是程序世界里的“月光宝盒”。 二、定义与结构备忘录(Memento)模式又称标记(Token)模式。GOF给备忘原创 2005-08-14 20:26:00 · 2822 阅读 · 0 评论 -
深入浅出状态模式
一、引子状态模式自身结构非常简单——前面刚刚介绍了几个结构比较简单的设计模式,和他们一样,状态模式在具体实现上留下了可变换的余地。我前面已经介绍过它的孪生兄妹策略模式了,大家可以两者比较着阅读。本文将会讨论两者的区别。 二、定义与结构GOF《设计模式》中给状态模式下的定义为:允许一个对象在其内部状态改变时改变它的行为。这个对象看起来似乎修改了它的类。看起来,状态模式好像是神通广大——居然能够“修原创 2005-08-07 17:57:00 · 3572 阅读 · 2 评论 -
深入浅出桥梁模式
一、引子桥梁(bright)模式是我介绍的23种模式中的最后一个结构模式。它是一个功能非常强大而且适用于多种情况的模式。 二、定义与结构GOF在《设计模式》中给桥梁模式的定义为:将抽象部分与它的实现部分分离,使它们都可以独立地变化。这里的抽象部分和实现部分不是我们通常认为的父类与子类、接口与实现类的关系,而是组合关系。也就是说,实现部分是被抽象部分调用,以用来完成(实现)抽象部分的功能。在《Thi原创 2005-03-27 21:52:00 · 6705 阅读 · 3 评论 -
深入浅出中介者模式
一、引子中介在现实生活中并不陌生,满大街的房屋中介、良莠不齐的出国中介……。它们的存在是因为它们能给我们的生活带来一些便利:租房、买房用不着各个小区里瞎转;出国留学也不用不知所措。中介者模式在程序设计中也起到了类似的作用。 二、定义与结构GOF给中介者模式下的定义是:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。简单点原创 2005-09-02 21:26:00 · 4219 阅读 · 1 评论 -
深入浅出模板方法模式
一、引子这是一个很简单的模式,却被非常广泛的使用。之所以简单是因为在这个模式中仅仅使用到了继承关系。继承关系由于自身的缺陷,被专家们扣上了“罪恶”的帽子。“使用委派关系代替继承关系”,“尽量使用接口实现而不是抽象类继承”等等专家警告,让我们这些菜鸟对继承“另眼相看”。其实,继承还是有很多自身的优点所在。只是被大家滥用的似乎缺点更加明显了。合理的利用继承关系,还是能对你的系统设计起到很好的作用的。而原创 2005-04-10 22:35:00 · 2875 阅读 · 1 评论 -
深入浅出观察者模式
一、引子还记得警匪片上,匪徒们是怎么配合实施犯罪的吗?一个团伙在进行盗窃的时候,总 有一两个人在门口把风——如果有什么风吹草动,则会立即通知里面的同伙紧急撤退。也许放风的人并不一定认识里面的每一个同伙;而在里面也许有新来的小弟不认识这个放风的。但是这没什么,这个影响不了他们之间的通讯,因为他们之间有早已商定好的暗号。呵呵,上面提到的放风者、偷窃者之间的关系就是观察者模式在现实中的活生生的例子原创 2005-05-16 20:01:00 · 36526 阅读 · 4 评论 -
深入浅出责任链模式
一、引言初看责任链模式,心里不禁想起了一个以前听过的相声:看牙。说的是一个病人看牙的时候,医生不小心把拔下的一个牙掉进了病人嗓子里。病人因此楼上楼下的跑了好多科室,最后无果而终。责任链模式就是这种“推卸”责任的模式,你的问题在我这里能解决我就解决,不行就把你推给另一个对象。至于到底谁解决了这个问题了呢?我管呢! 二、定义与结构从名字上大概也能猜出这个模式的大概模样——系统中将会存在多个有类似处理能原创 2005-05-27 20:58:00 · 2953 阅读 · 0 评论 -
模式实践:观察者模式与Spring
公司的项目告一段落,最近在进行RUP培训项目,有了些空闲的时间。闲暇浏览TheServerSide时,看到一篇名叫《Spring loaded Observer Pattern》的文章,不禁会心一笑——我已在两个月前应用到项目中了。而作者的观点也和我的观点吻合:the Spring framework is a great reason to continue design pattern原创 2005-10-28 20:16:00 · 7044 阅读 · 1 评论 -
深入浅出命令模式
一、引言忙里偷闲,终于动笔了。命令模式是从界面设计中提取出来的一种分离耦合,提高重用的方法。被认为是最优雅而且简单的模式,它的应用范围非常广泛。让我们一起来认识下它吧。先从起源说起。在设计界面时,大家可以注意到这样的一种情况,同样的菜单控件,在不同的应用环境中的功能是完全不同的;而菜单选项的某个功能可能和鼠标右键的某个功能完全一致。按照最差、最原始的设计,这些不同功能的菜单、或者右键弹出菜单是要分原创 2005-06-16 20:08:00 · 4327 阅读 · 0 评论 -
深入浅出访问者模式
一、引子 对于系统中一个已经完成的类层次结构,我们已经给它提供了满足需求的接口。但是面对新增加的需求,我们应该怎么做呢?如果这是为数不多的几次变动,而且你不用为了一个需求的调整而将整个类层次结构统统地修改一遍,那么直接在原有类层次结构上修改也许是个不错的主意。 但是往往我们遇到的却是:这样的需求变动也许会不停的发生;更重要的是需求的任何变动可能都要让你将整个类层次结构修改个原创 2005-07-14 20:58:00 · 3847 阅读 · 6 评论 -
深入浅出门面模式
一、引子门面模式是非常简单的设计模式。 二、定义与结构门面模式(facade)又称外观模式。GOF在《设计模式》一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。定义中提到的子系统是指在设计中为了降低复杂性根据一定的规则(比如业务、功能),对系统进行的划分。子系统中封装有一些类。客户程序在使用子系统的时候,可能会像原创 2005-03-07 21:17:00 · 4543 阅读 · 1 评论 -
深入浅出装饰模式
一、引子装饰模式?肯定让你想起又黑又火的家庭装修来。其实两者在道理上还是有很多相像的地方。家庭装修无非就是要掩盖住原来实而不华的墙面,抹上一层华而不实的涂料,让生活多一点色彩。而墙还是那堵墙,他的本质一点都没有变,只是多了一层外衣而已。那设计模式中的装饰模式,是什么样子呢? 二、定义与结构装饰模式(Decorator)也叫包装器模式(Wrapper)。GOF在《设计模式》一书中给出的定义为:动态地原创 2005-03-01 22:52:00 · 9411 阅读 · 9 评论 -
深入浅出代理模式
关键字:代理模式 java 一、引子我们去科技市场为自己的机器添加点奢侈的配件,很多DIYer都喜欢去找代理商,因为在代理商那里拿到的东西不仅质量有保证,而且价格和售后服务上都会好很多。客户通过代理商得到了自己想要的东西,而且还享受到了代理商额外的服务;而生产厂商通过代理商将自己的产品推广出去,而且可以将一些销售服务的任务交给代理商来完成(当然代理商要和厂商来共同分担风险,分配利润),原创 2004-12-14 20:41:00 · 7264 阅读 · 3 评论 -
深入浅出享元模式
一、引子让我们先来复习下java中String类型的特性:String类型的对象一旦被创造就不可改变;当两个String对象所包含的内容相同的时候,JVM只创建一个String对象对应这两个不同的对象引用。让我们来证实下着两个特性吧(如果你已经了解,请跳过直接阅读第二部分)。先来验证下第二个特性:public class TestPattern { public sta原创 2004-12-21 20:04:00 · 29699 阅读 · 18 评论 -
深入浅出设计模式之绪论
设计模式一词跟随着95年发行的《Design Pattern , Elements of Reusable Object-Oriented Software》一书流行了起来;一本《Java与模式》更是让更为广泛的中国开发者理解和爱上了设计模式!在板桥里人的一片关于设计模式的文章中曾说过:“就Java语言体系来说,GOF的设计模式是Java基础知识和J2EE框架知识之间一座隐性的"桥"。”给予设原创 2004-12-23 21:13:00 · 4415 阅读 · 1 评论 -
深入浅出策略模式
一、引子18日下午3时一刻,沈阳,刚刚下完一场几年罕见的大雪,天气格外的冷,公交车在“车涛汹涌”的公路上举步维艰,我坐在里面不时的看表——回公司的班车就要发车了,我还离等车的地方好远……。都是这可恶的天气打乱了我的计划!看来我要重新盘算下下了公交车的计划了:如果在半点以前能够到达等班车的地方,我就去旁边卖书报的小店里面买份《南方周末》,顺便逼逼严寒;如果可恶的公交到时候还不能拱到的话,我就只好原创 2004-12-26 14:23:00 · 3946 阅读 · 0 评论 -
深入浅出原型模式
一、引子古人云:书非借不能读也。我深谙古人教诲,更何况现在IT书籍更新快、价格贵、质量水平更是参差不齐,实在不忍心看到用自己的血汗钱买的书不到半年就要被淘汰,更不想供养使用金山快译、词霸等现代化工具的翻译们。于是我去书店办了张借书卡,这样便没有了后顾之忧了——书不好我可以换嘛!但是,借书也有不爽的地方,就是看到有用或者比较重要的地方,不能在书旁标记下来。一般我会将这页内容复印下来,这样作为原创 2005-01-02 15:54:00 · 3929 阅读 · 0 评论 -
深入浅出解释器模式
一、引子其实没有什么好的例子引入解释器模式,因为它描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中;在实际应用中,我们可能很少碰到去构造一个语言的文法的情况。 虽然你几乎用不到这个模式,但是看一看还是能受到一定的启发的。 二、定义与结构解释器模式的定义如下:定义语言的文法,并且建立一个解释器来解释该语言中的句子。它属于类的行为模式。这里的语原创 2005-01-08 21:09:00 · 4020 阅读 · 3 评论 -
深入浅出单例模式
一、引子单例模式是设计模式中使用很频繁的一种模式,在各种开源框架、应用系统中多有应用,在我前面的几篇文章中也结合其它模式使用到了单例模式。这里我们就单例模式进行系统的学习。并对有人提出的“单例模式是邪恶的”这个观点进行了一定的分析。 二、定义与结构单例模式又叫做单态模式或者单件模式。在GOF书中给出的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式中的“单例”原创 2005-01-13 21:45:00 · 4695 阅读 · 4 评论 -
深入浅出建造模式
一、引子前几天陪朋友去装机店攒了一台电脑,看着装机工在那里熟练的装配着机器,不禁想起来了培训时讲到的建造模式。作为装机工,他们不用管你用的CPU是Intel还是AMD,也不管你的显卡是2000千大元还是白送的,都能三下五除二的装配在一起——一台PC就诞生了!当然对于客户来说,你也不知道太多关于PC组装的细节。这和建造模式是多么的相像啊! 今天就来探讨一下建造模式 二、定原创 2005-01-19 21:37:00 · 2847 阅读 · 3 评论 -
深入浅出适配器模式
一、引子昨天在给新买的MP3充电的时候,发现这款MP3播放器只提供了USB接口充电的方式,而它所配备的充电器无法直接给USB接口充电,聪明的厂商为充电器装上了一个USB接口转换器解决了问题。这个USB接口转接器正是我们今天要谈到的适配器。而在软件开发中采用类似于上面方式的编码技巧被称为适配器模式。 二、定义和结构《设计模式》一书中是这样给适配器模式定义的:将一个类的接口转换成客原创 2005-01-30 20:43:00 · 3878 阅读 · 0 评论 -
深入浅出组合模式
一、引子在大学的数据结构这门课上,树是最重要的章节之一。还记得树是怎么定义的吗?树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:(1) 有且仅有一个特定的称为根(Root)的结点;(2) 其余的结点可分为m(m≥0)个互不相交的子集Tl,T2,…,Tm,其中每个子集本身又是一棵树,并称其为根的子树(SubTree)。上面给出的递归定原创 2005-02-23 10:33:00 · 18480 阅读 · 5 评论 -
由表及里看模式
一、引子记得一年前,我开始陆陆续续在自己的blog上连载《深入浅出设计模式》。其内容无出经典巨著《设计模式》之右,仅仅偶有己见,但是它记录了我学习、思考和讲述设计模式的过程。一晃,距离写成最后一片设计模式的文章已有3月余,我却迟迟没有对设计模式做一个总结。心想,总不能虎头蛇尾吧,于是便有了这篇文章。 二、回顾23种设计模式先来回顾下这23种经典的设计模式吧,下图给出了GOF对它们的分类:原创 2005-12-18 18:24:00 · 9415 阅读 · 4 评论