designPatten
文章平均质量分 84
tnt32
这个作者很懒,什么都没留下…
展开
-
设计模式学习笔记(1)
在学习设计模式的过程中,我常常问自己设计模式到底是什么,经过这段时间的学习,我给了自己一个答案.设计模式———让代码更容易被他人理解, 可重用,保证代码可靠性的一种方法.在我心目中,GOF写的23个设计模式就向是唐诗三百首一样,它是你你将成为你成为诗人的必须掌握的基础.一个好的诗人是不会把唐诗三百首挂在嘴边的,但你在成为一名诗人之前必须要熟读,通过它来提生你对诗基本技能的掌握如声,韵等.学习过程我转载 2011-11-12 11:51:13 · 405 阅读 · 0 评论 -
23种设计模式(14):解释器模式
定义:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。类型:行为类模式类图: 解释器模式是一个比较少用的模式,本人之前也没有用过这个模式。下面我们就来一起看一下解释器模式。 解释器模式的结构抽象解释器:声明一个所有具体表达式都要实现的抽象接口(或者抽象类),接口中主要是一个interp转载 2012-08-04 02:15:10 · 788 阅读 · 0 评论 -
23种设计模式(12):策略模式
定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。类型:行为类模式类图: 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换。在前面说过的行为类模式中,有一种模式也是关注对算法的封装——模版方法模式,对照类图可以看到,策略模式与模版方法模式的区别仅仅是多了一个单独的封装类Context,转载 2012-08-04 02:45:30 · 744 阅读 · 0 评论 -
23种设计模式(11):责任连模式
定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。类型:行为类模式类图: 首先来看一段代码:[java] view plaincopypublic void test(int i, Request req转载 2012-08-04 02:52:11 · 702 阅读 · 0 评论 -
23种设计模式(10):命令模式
定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。类型:行为类模式类图:命令模式的结构 顾名思义,命令模式就是对命令的封装,首先来看一下命令模式类图中的基本结构:Command类:是一个抽象类,类中对需要执行的命令进行声明,一般来说要对外公布一个execute转载 2012-08-04 02:54:15 · 875 阅读 · 0 评论 -
23种设计模式(9):访问者模式
定义:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。类型:行为类模式类图: 访问者模式可能是行为类模式中最复杂的一种模式了,但是这不能成为我们不去掌握它的理由。我们首先来看一个简单的例子,代码如下:[java] view plaincopyclass转载 2012-08-04 02:59:15 · 852 阅读 · 0 评论 -
23种设计模式(6):模版方法模式
定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。类型:行为类模式类图: 事实上,模版方法是编程中一个经常用到的模式。先来看一个例子,某日,程序员A拿到一个任务:给定一个整数数组,把数组中的数由小到大排序,然后把排序之后的结果打印出来。经过分析之后,这个任务大体上可分为两部分,排序和转载 2012-08-04 03:04:40 · 690 阅读 · 0 评论 -
23种设计模式(3):抽象工厂模式
定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。类型:创建类模式类图:抽象工厂模式与工厂方法模式的区别 抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,转载 2012-08-04 03:10:50 · 340 阅读 · 0 评论 -
算法的封装与切换——策略模式
作者:刘伟 http://blog.csdn.net/lovelion俗话说:条条大路通罗马。在很多情况下,实现某个目标的途径不止一条,例如我们在外出旅游时可以选择多种不同的出行方式,如骑自行车、坐汽车、坐火车或者坐飞机,可根据实际情况(目的地、旅游预算、旅游时间等)来选择一种最适合的出行方式。在制订旅行计划时,如果目的地较远、时间不多,但不差钱,可以选择坐飞机去旅游;如果转载 2012-08-04 03:29:44 · 2267 阅读 · 0 评论 -
外观模式及其改进
外观模式是使用频率最高的结构型设计模式之一,无论是在Web应用软件或是桌面应用软件,还是在移动应用软件中,外观模式都得到了广泛的应用。 外观模式要求外部与一个子系统的通信可以通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的入口,它定义了一个高层接口,这个接口使得相关子系统更加容易使用。如果没有外观角色,每个客户端可能需要和多个子系统之间进行复杂的交互,系统的耦合度将转载 2012-08-04 03:33:49 · 888 阅读 · 0 评论 -
23种设计模式(1):单例模式
定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。类型:创建类模式类图:类图知识点:1.类图分为三部分,依次是类名、属性、方法2.以>结尾的为注释信息3.修饰符+代表public,-代表private,#代表protected,什么都没有代表包可见。4.带下划线的属性或方法代表是静态的。5.对类图中对象的关转载 2012-08-04 03:13:32 · 411 阅读 · 0 评论 -
对象间的联动——观察者模式
观察者模式是设计模式中的“超级模式”,其应用随处可见,在之后几篇文章里,我将向大家详细介绍观察者模式。 “红灯停,绿灯行”,在日常生活中,交通信号灯装点着我们的城市,指挥着日益拥挤的城市交通。当红灯亮起,来往的汽车将停止;而绿灯亮起,汽车可以继续前行。在这个过程中,交通信号灯是汽车(更准确地说应该是汽车驾驶员)的观察目标,而汽车是观察者。随着交通信号灯的变化,汽车的行为转载 2012-08-04 03:56:23 · 1417 阅读 · 0 评论 -
实现对象的复用——享元模式
当前咱们国家正在大力倡导构建和谐社会,其中一个很重要的组成部分就是建设资源节约型社会,“浪费可耻,节俭光荣”。在软件系统中,有时候也会存在资源浪费的情况,例如在计算机内存中存储了多个完全相同或者非常相似的对象,如果这些对象的数量太多将导致系统运行代价过高,内存属于计算机的“稀缺资源”,不应该用来“随便浪费”,那么是否存在一种技术可以用于节约内存使用空间,实现对这些相同或者相似对象的共享访问呢?答案转载 2012-08-05 22:44:03 · 2715 阅读 · 1 评论 -
如何在类图中标注设计模式 1
随着设计模式的广泛使用,如何在结构图(主要是UML类图)中标注设计模式成为大家讨论的一个热点话题。设计模式是软件设计中的一些微结构,通过一种合理的方法来标注设计模式既有助于开发人员更好地进行设计软件系统,也有利于理解一些遗留系统,具体来说,设计模式的标注具有以下意义: (1) 在系统设计和实现阶段,如果能够通过一种简单易懂的方式来标注相应的模式角色,将有助于开发人员开发和设计软件时记转载 2012-08-05 22:48:11 · 628 阅读 · 0 评论 -
深入浅析:面向对象编程四大原则
深入浅析:面向对象编程四大原则 在面向对象设计中,如何通过很小的设计改变就可以应对设计需求的变化,这是令设计者极为关注的问题。为此不少OO先驱提出了很多有关面向对象的设计原则用于指导OO的设计和开发。下面是几条与类设计相关的设计原则。 1. 开闭原则(the Open Closed Principle OCP) 一个模块在扩展性方面应该是开放的而在更改性方面应转载 2012-11-18 07:02:09 · 602 阅读 · 0 评论 -
几种结构型设计模式的对比
【IT168技术文档】 各种结构型设计模式由于或是采用类继承机制、或是采用对象组合方式实现,所以很多都具有一定的相似性,下面对比较相似的四组模式进行讨论 1、适配器Adapter VS 组合Composite 相似点:都为客户提供了一致性。 Adapter通过提供一致性使被适配组件Adaptee和目标组件Target兼容,从而使得这些组件可以转载 2013-01-01 13:15:12 · 551 阅读 · 0 评论 -
设计模式比较
http://my.oschina.net/rainingcn/blog/41458一。创建者模式: 1.工厂模式注重的是整体对象的创建方法,而建造者模式注重的是部件构建的过程,旨在通过一步步的精确构造创建出一个复杂的对象。抽象工厂模式实现对产品家族的创建。 2.(抽象)工厂模式与创建者模式的不同: 2.1 意图不同:转载 2013-01-01 13:13:40 · 358 阅读 · 0 评论 -
23种设计模式(15):备忘录模式
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态类型:行为类类图: 我们在编程的时候,经常需要保存对象的中间状态,当需要的时候,可以恢复到这个状态。比如,我们使用Eclipse进行编程时,假如编写失误(例如不小心误删除了几行代码),我们希望返回删除前的状态,便可以使用Ctrl+Z来转载 2012-08-04 02:13:29 · 736 阅读 · 0 评论 -
设计模式与足球
今天晚上2012年欧洲杯决赛(西班牙 VS 意大利),作为一名铁杆球迷,偶当然不会错过(请不要让我来预测比分,我不是章鱼,更何况这两个队我都非常喜欢,输赢我都很淡定,),在静候决赛的这段时间,突然萌发一个想法,将设计模式跟足球联系到一起写点啥,就像当年那篇知名度极高的《追MM与设计模式》一样,以供娱乐!,话不多说,即刻动手! 创建型模式 (1) 工厂方转载 2012-08-04 04:05:17 · 2495 阅读 · 0 评论 -
框架和设计模式的关系
框架是一个应用程序的半成品。框架提供了可在应用程序之间共享的可覆用的公共结构。开发者把框架融入他们自己的应用程序,并加以扩展,以满足他们特定的需要。框架和工具包的不同之处在于,框架提供了一致的结构,而不仅仅是一组工具类。 框架其实就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。 可以说,一个框架是一个可转载 2011-11-12 11:56:50 · 550 阅读 · 0 评论 -
简单工厂模式的实现
该代码实现了四则运算,用简单工厂模式开发. class Program { static void Main(string[] args) { Console.Write("请输入数字A:"); string A = Console.ReadLine(); Cons转载 2011-11-12 11:59:55 · 297 阅读 · 0 评论 -
各种设计模式分析
简单工厂模式:通过工厂类对业务逻辑选择封装化,把业务逻辑封装到工厂方法中.优点是使业务逻辑和业务实现真正 分离.缺点是扩展起来非常不方便.需要修改原来的工厂实现代码。试用于业务比较多,但是变化比较小的情况抽象工厂模式:通过抽象工厂,对比起来,他可以轻易加载返回的业务类。且可以对返回类抽象化.实现业务类很多,且方法类型也很多.但是用户需求有变化的时转载 2011-11-12 12:01:49 · 372 阅读 · 0 评论 -
三个工厂模式的区别
简单工厂是工厂方法模式的特例。 工厂方法模式和抽象工厂模式的最主要的区别在于对工厂的抽象程度上。 抽象工厂模式中一般是抽象出工厂接口,表示他就是一个工厂,而不管它是制造什么产品的工厂,他的抽象程度较高。 而工厂方法模式的抽象工厂一般是针对于产品进行抽象,表示它是一个生产某类产品的工厂。 简单工厂是不支持继承的,如果需要建立的对象过多,会使这个类变大,建立偶合性集中在这转载 2011-11-12 11:55:40 · 355 阅读 · 0 评论 -
装饰模式
class Program { static void Main(string[] args) { Beverage beverage = new Espresso(); Console.WriteLine(beverage.getDesciption() + "$" + beverage.cos转载 2011-11-12 11:58:42 · 281 阅读 · 0 评论 -
设计模式原则
设计模式原则1. 单一职责原则:一个类最好只有一个变化因数,这样可以使代码的重用率达到最高.2. 开放封闭原则:开放扩张,对代码的修改封闭.3. 依赖倒转原则:面向接口编程,不要面向实现编程.4. 迪米特法则:系统类之间要尽量减少他们之间的相互作用.减少类之间的耦合度.5. 接口隔离原则:接口的定义转载 2011-11-12 12:00:21 · 324 阅读 · 0 评论 -
策略模式的实现
class Program { static void Main(string[] args) { Duck duck = new MiniDuck(); duck.fly(); FlyBehavior Fly = new FlyRocketPowered();转载 2011-11-12 11:59:04 · 286 阅读 · 0 评论 -
工厂方法模式
class Program { static void Main(string[] args) { Console.Write("请输入数字A:"); string A = Console.ReadLine(); Console.Write("请选择运算符号(+、-、*、/)转载 2011-11-12 11:59:26 · 288 阅读 · 0 评论 -
23种设计模式(13):迭代器模式
定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。类型:行为类模式类图: 如果要问java中使用最多的一种模式,答案不是单例模式,也不是工厂模式,更不是策略模式,而是迭代器模式,先来看一段代码吧:[java] view plaincopypublic static void prin转载 2012-08-04 02:24:45 · 662 阅读 · 0 评论 -
23种设计模式(8):观察者模式
定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。类型:行为类模式类图: 在软件系统中经常会有这样的需求:如果一个对象的状态发生改变,某些与它相关的对象也要随之做出相应的变化。比如,我们要设计一个右键菜单的功能,只要在软件的有效区域内点击鼠标右键,就会弹出一个菜单;再比如,我们要设计一个自动部署转载 2012-08-04 03:01:24 · 774 阅读 · 0 评论 -
23种设计模式(7):中介者模式
定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。类型:行为类模式类图:中介者模式的结构 中介者模式又称为调停者模式,从类图中看,共分为3部分: 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子转载 2012-08-04 03:02:39 · 645 阅读 · 0 评论 -
23种设计模式(5):原型模式
定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。类型:创建类模式类图:原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件:实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clo转载 2012-08-04 03:08:11 · 383 阅读 · 0 评论 -
23种设计模式(4):建造者模式
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。类型:创建类模式类图:四个要素产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。抽象建造者:引入抽象转载 2012-08-04 03:09:37 · 340 阅读 · 0 评论 -
23种设计模式(2):工厂方法模式
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。类型:创建类模式类图:工厂方法模式代码[java] view plaincopyinterface IProduct { public void productMethod(); } cl转载 2012-08-04 03:12:41 · 385 阅读 · 0 评论 -
外观模式
外观模式是使用频率最高的结构型设计模式之一,无论是在Web应用软件或是桌面应用软件,还是在移动应用软件中,外观模式都得到了广泛的应用。 外观模式要求外部与一个子系统的通信可以通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的入口,它定义了一个高层接口,这个接口使得相关子系统更加容易使用。如果没有外观角色,每个客户端可能需要和多个子系统之间进行复杂的交互,系统的耦合度将转载 2012-08-04 03:53:41 · 693 阅读 · 0 评论 -
自定义语言的实现——解释器模式
有朋友一直在等待我的解释器模式文稿,,现把某个版本发在博客上,欢迎大家讨论! 虽然目前计算机编程语言有好几百种,但有时候我们还是希望能用一些简单的语言来实现一些特定的操作,我们只要向计算机输入一个句子或文件,它就能够按照预先定义的文法规则来对句子或文件进行解释,从而实现相应的功能。例如提供一个简单的加法/减法解释器,只要输入一个加法/减法表达式,它就能够计算出表达式结果,如图1转载 2012-08-04 04:01:12 · 6157 阅读 · 0 评论 -
设计模式 经典书籍必备推荐
很多朋友问学习设计模式的书籍,老大沧浪在FAQ里有个简短的叙述,这里我引申一下,说说自己看过或者翻过的设计模式书籍,由于水平所限,肯定有不对的地方,希望大家指正,如果大家看到好的模式相关书籍,希望能回帖补充。首 先模式是不分语言的,Beck在他的TDD一书中用python实现了Composite模式,充分证明了这一点。不过我认为目前模式方面的好书基本都是 基于java语言的,所以不管你是用转载 2013-01-04 00:22:15 · 629 阅读 · 0 评论