
设计模式
hackerain
这个作者很懒,什么都没留下…
展开
-
设计模式学习笔记——策略模式
定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。通用类图如下:策略模式的优点:1、算法可以自由切换2、避免了使用多重条件判断3、扩展性良好策略模式的缺点:所有策略类都需要对外暴露,上层模块必须知道有哪些策略,然后才能决定使用哪个策略,这与迪米特法则是相违背的,可以混合工厂方法模式、代理模式等解决这个缺点。通用代码原创 2012-05-10 15:39:09 · 729 阅读 · 0 评论 -
设计模式学习笔记——门面模式
定义:要求一个子系统的外部和其内部的通信必须通过一个统一的对象进行,门面模式提供一个高层次的接口,使得子系统更易于使用。“统一的对象”,也就是提供一个访问子系统的接口,除了这个接口,不允许有任何访问子系统的行为发生,门面对象是外界访问子系统的唯一通道,不管子系统内部是多么杂乱无章,只要有门面模式在,就可以做到“金玉其外,败絮其中”。其通用类图如下:举一个简单原创 2012-05-13 01:48:33 · 839 阅读 · 0 评论 -
设计模式学习笔记——适配器模式
定义:将一个类的接口变成客户端所期待的另一种接口,从而使原本因为接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式有两种表现形式,一种称作“类适配器”,一种称作“对象适配器”。在本文中将举一个“本公司员工和外来公司员工”这样的一个例子,本公司员工的信息是由本公司的系统来维护的,但是外来公司员工的信息是在他们自己的公司中维护的,但是现在要将外来员工的信息整合到本公司的员工管原创 2012-05-13 00:44:44 · 823 阅读 · 0 评论 -
设计模式学习笔记——观察者模式
前言:终于接触到观察者模式了,很早很早以前就听说过这个模式,当时也大概读了一下,但是并没有理解,总感觉这是一个很牛的东西,今天我要理解它……定义:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于他的对象都会得到通知并被自动更新。在java中已经实现了观察者(Observer)和被观察者(Observable),在这里就实现一下java中的方法,原创 2012-05-13 18:06:40 · 872 阅读 · 0 评论 -
设计模式学习笔记——迭代器模式
定义:它提供一种方法访问一个容器对象中的各个元素,而又不需要暴露该对象的内部细节。迭代器是为容器服务的,迭代器模式为了解决遍历容器中的元素而诞生的,从而使容器只管增减元素就可以了,需要遍历时,交给迭代器处理。其通用类图如下:实现代码如下:public interface Iterator { public Object next(); public bool原创 2012-05-13 02:49:38 · 906 阅读 · 0 评论 -
设计模式学习笔记——备忘录模式
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态。备忘录模式主要是对某个对象的状态的备份,备份的主要是对象当前的属性值,即成员变量的值,成员变量可以有多个,而且可以备份同一个对象的多种不同状态,即同一个对象可以同时有多个备份,先来看最简单的情况,即一个对象只有一个成员变量:其通用类图为:源代码如原创 2012-05-13 23:19:58 · 836 阅读 · 0 评论 -
设计模式学习笔记——组合模式
定义:将对象组合成树形结构以表示“部分—整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。组合模式主要用来处理一些具有“容器特征”的对象,即他们在充当对象的同时,又可以作为容器包含其他的多个对象。也就是说组合模式表达的是一种树形的结构,将数据结构中的“树”,用面向对象的方式表现出来了,而且表达的是一种多叉树。看如下的通用类图:源代码如下:/* * 抽原创 2012-05-14 12:34:58 · 927 阅读 · 1 评论 -
设计模式学习笔记——访问者模式
定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。这里先来说一下访问者模式的使用场景:1、需要对一个对象结构中的对象进行很多不同且不相关的操作,而又不想让这些类变得异常繁杂。2、一个对象包含很多的类对象,他们有不同的接口,而想对这些对象实施一些依赖于其具体类的操作,也就是用迭代器模式已经不能胜任的场景。原创 2012-05-14 15:51:43 · 958 阅读 · 0 评论 -
设计模式学习笔记——装饰模式
定义:动态的给一个对象添加额外的职责,就增加功能来说,装饰模式相比生成子类更为灵活。其通用类图如下:装饰模式的优点:1、装饰类和被装饰类可以独立发展,互不耦合,因为装饰类是从外部来扩展被装饰类的功能的,所以Component无需知道Decorator2、装饰模式是继承关系的一个替代方案,当继承的时候,如果需要生成很多的子类,才能解决问题,那么就会降低系统原创 2012-05-14 16:56:14 · 828 阅读 · 0 评论 -
设计模式学习笔记——责任链模式
定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。在这里举一个用户注册的例子,这个例子源于《设计模式之禅》上关于本模式的讲解,说是作者在实际项目中用到的这个责任链模式,我这里进行了简化操作,该例子描述如下:用户分为两类,VIP用户户和普通用户,VIP用户是在他们公司办理过业务的用户,注原创 2012-05-14 23:54:58 · 953 阅读 · 0 评论 -
设计模式学习笔记——解释器模式
定义:给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。这个模式个人感觉比较难理解,需要借助例子来消化,先来看一个例子:即四则运算的模型公式,所谓模型公式就是可以自定义的一个表达式,自定义好表达式之后,对参数进行赋值,就可以计算出结果,关键是这个公式是可以自定义的,只要符合规定的文法即可,输入参数,计算结果。这就是一个解释器模式,输入的表原创 2012-05-16 01:17:01 · 1035 阅读 · 0 评论 -
设计模式学习笔记——享元模式
定义:使用共享对象可以有效的支持大量的细粒度的对象。这里出现两个名词:共享对象和细粒度对象,所谓共享对象,这个好说,就是这个对象是常驻在内存中的,供大家一起使用,细粒度对象是说对象很多而且这些对象性质很相近,可以提取出很多公共的属性,那么这样来说,细粒度对象的属性就可以分为两种了,一种是可以共享的,称作外部状态,一种是不可以共享的,称作内部状态(我觉得《设计模式之禅》作者这里说的有原创 2012-05-15 21:32:39 · 2127 阅读 · 2 评论 -
设计模式学习笔记——命令模式
定义:将一个请求封装成对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求的日志,可以提供命令的撤销和恢复功能。通用类图如下:通用代码如下://命令接受者public abstract class Receiver { public abstract void doSomething();}public class ConcreteRec原创 2012-05-12 21:34:31 · 775 阅读 · 0 评论 -
设计模式学习笔记——抽象工厂模式
定义:为创建一组相关或相互依赖的对象提供一组接口,而且无需指定它们的具体类。抽象工厂模式是工厂模式的升级版本,因为它应对的是更加复杂的业务,即当有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。由于抽象工厂类较为复杂,我觉得使用一个具体的例子,更能形象的表达这个模式的思想,而且容易理解,这里画类图就不使用通用的类图了,模拟一个跨Windows和Linux原创 2012-05-04 22:11:05 · 872 阅读 · 1 评论 -
设计模式学习笔记——中介者模式
定义:用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示的互相交互,从而使其耦合松散,而且可以独立的改变他们之间的交互。模式动机:1、在面向对象的软件设计与开发过程中,根据“单一职责原则”,我们应该尽量将对象细化,使其只负责或呈现单一的职责。2、对于一个模块,可能由很多对象构成,而且这些对象之间可能存在相互的引用,为了减少对象两两之间复杂的引用关系,使之成为一个松原创 2012-05-10 14:51:34 · 1207 阅读 · 0 评论 -
设计模式学习笔记——里氏替换原则
里氏替换原则是针对继承的,它为良好的继承定义了一个规范。从学习面向对象编程开始,就知道了继承的概念,是面向对象的三大特征之一,但是继承究竟有什么好的呢?凡事都有两面性,在尽享继承带来的好处的同时,它又给我们带来什么弊端呢?这里我们来回顾一下:好处:1、代码共享,减少创建类的工作量,每个子类都拥有父类的方法和树形;2、提高代码的重用性;3、提高代码的可扩展性;4、提高项目或产原创 2012-04-30 20:39:39 · 1128 阅读 · 0 评论 -
设计模式学习笔记——接口隔离原则
定义:1、客户端不应该依赖于它不需要的接口2、类间的依赖关系应该建立在最小的接口上通俗的讲,应该建立单一的接口,不要建立臃肿庞大的接口,即接口应该尽量细化,同时接口中的方法尽量少。举例:要成为一名美女必须具备三个条件:面貌、身材、气质,星探找美女的过程如下类图所示:IPrettyGirl接口中定义了三个方法,只有这三个条件都满足,才会被称作美女,在星探的抽象类中,用原创 2012-05-01 21:01:01 · 718 阅读 · 0 评论 -
设计模式学习笔记——依赖倒置原则
依赖倒置最精简的定义就是“面向接口编程”,这个思想我以前一直没有理解,写了很久的程序了,几乎很少写接口,也从不想去写接口,不知道接口到底有什么用,其实,还是写的少啊,而且写的东西都是小型的东西,看来还没有到达要用接口的程度。但是看了这个原则的讲解,知道了接口,或者叫做抽象的作用的重要性和方便性。依赖倒置原则在java语言中的表现就是:1、模块间的依赖是通过抽象发生的,实现类之间不发生直接的原创 2012-05-01 19:41:11 · 1109 阅读 · 0 评论 -
设计模式学习笔记——迪米特法则
迪米特法则是针对类之间的低耦合而提出的,它要求一个类应该对自己需要耦合或者调用的类知道的最少,即被耦合或调用的类的内部如何复杂,跟本类没有一点关系,本类就知道你提供给我多少public方法,本类就调用这些方法,其他的你不要让我知道。这个法则有以下基层含义:1、只和朋友类交流什么是朋友类呢?即和自己相耦合的类。既然相耦合,那么肯定是这两个耦合的类之间要存在交互,那些不存在交互的,却耦合到原创 2012-05-01 22:12:15 · 1397 阅读 · 0 评论 -
设计模式学习笔记——开闭原则
定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。即一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。一、什么是开闭原则举个书店售书的例子:代码如下:public interface IBook { public String getName(); public int getPrice(); publ原创 2012-05-02 00:22:51 · 1769 阅读 · 0 评论 -
设计模式学习笔记——单例模式
定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式的通用类图如下:代码如下:public class Singleton { private static final Singleton singleton=new Singleton(); //私有的构造函数,限制产生多个对象 private Singleton(){ Sys原创 2012-05-02 20:53:55 · 765 阅读 · 0 评论 -
设计模式学习笔记——工厂方法模式
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。通用类图:代码如下:public abstract class Product { public void method1(){ System.out.println("method1 invoked"); } public abstract void metho原创 2012-05-03 13:20:37 · 1022 阅读 · 0 评论 -
设计模式学习笔记——模板方法模式
定义:定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。模板方法模式类中,有两种方法,一种是基本方法,是由子类实现的,并且在模板方法中调用,这些函数要定义成抽象的;第二种方法时模板方法,实现对基本方法的调度,完成固定的逻辑,这个方法是在父类中就已经实现了的。我们还可以在父类中,定义一个“钩子函数”,用以控制模板方法中,某些原创 2012-05-04 23:41:48 · 712 阅读 · 0 评论 -
设计模式学习笔记——状态模式
定义:当一个对象内在的状态改变时,允许其改变行为,这个对象看起来像是改变了其类。状态模式不太好理解,我现在还没有完全理解,这个模式给我的第一印象就是比较乱,给我的感觉好像是两个类互相依赖,①调用②的方法,②调用①的方法,弄的好乱,所以这个状态模式就不用通用类图去描述了,那样会不知所云,还是举一个实际的例子来理解吧。这个例子是书本上的一个例子,是针对足球队比赛时,根据比分的领先还是落后,原创 2012-05-06 12:59:50 · 885 阅读 · 0 评论 -
设计模式学习笔记——创建者模式
这个模式也是比较难理解的,我看了《设计模式之禅》上讲解的例子,但是看完之后一头雾水,而且好乱,仍然没有理解,看了好几遍,还是没有理解,于是我又去翻开我的课本,看那上面的例子,但是结果依然。于是上网搜,搜了很多,但是都不是很理想,最终功夫不负有心人,终于找到一个我能理解,而且我认为比较合理的创建者模式的讲解,在这里感谢作者,原文地址:http://blog.youkuaiyun.com/lovelion/art原创 2012-05-07 02:05:57 · 774 阅读 · 0 评论 -
设计模式学习笔记——代理模式
定义:为其他对象提供一种代理以控制对这个对象的访问。Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层,这个访问层就是原创 2012-05-08 03:00:57 · 815 阅读 · 0 评论 -
设计模式学习笔记——原型模式
定义:用原型实例创建对象的种类,并且通过拷贝这些原型创建新的对象。在java中,其实原型模型已经应用到了平常的操作中,即只要类实现了Cloneable接口,那么这个类的对象,就可以通过其父类的clone()方法被复制,这就是原型模型。但是要注意以下几点:1、通过复制的方式产生了一个对象,构造方法是不会执行的,因为Object类的clone()方法的原理是从内存中以二进制流的方式进行原创 2012-05-08 13:36:30 · 637 阅读 · 0 评论 -
设计模式学习笔记——桥梁模式
定义:将抽象和实现解耦,使得两者可以独立地变化。(抽象角色引用实现角色,实现抽象角色的部分实现) 桥接模式主要是为了补充继承的缺点的,继承有什么缺点呢?即强侵入,父类有这个方法,子类也必须有这个方法,这是不可选择的,会带来扩展性的问题。比如A类有一个方法,B类继承了A类的这个方法,C类继承了B类的这个方法,如果B类要重写父类的这个方法,那么它就要修改和C类的关系,这就带来了很大的风险。原创 2012-05-21 23:18:30 · 894 阅读 · 0 评论