
设计模式
文章平均质量分 83
gatusso052
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
代理模式、静态代理、动态代理、Spring AOP
什么是代理模式:代理模式的作用其实就是为一个对象提供一种代理以控制这个对象,然后把这个代理提供给别人来使用。 代理模式会在那些情况下使用呢?在某些情况下,一个客户不想或者不能直接引用或者说在引用目标对象前后要进行一些额外的工作时候,代理对象可以在客户端和目标对象之间起到中介的作用。 代理模式的角色有3种:抽象角色:声明真实对象...2009-03-04 20:34:58 · 104 阅读 · 0 评论 -
命令模式
面向对象的回调函数?? 1 解决问题命令方发送不同的命令,执行者进行不同的操作。此时命令方需要与执行者紧密耦合,增加新命令也不好加。 2 解决办法一个执行者Receiver,固有类,执行自己的各种action一个抽象的命令类Command,里面有一个Receiver属性若干具体命令类ConcreatCommand,其中各自的execute()方法各自代理了...2009-06-21 12:48:44 · 97 阅读 · 0 评论 -
状态模式
1 解决问题一个对象,有一系列的状态,每个状态对应一种操作或属性此时,判断当前究竟处于那种状态需要有很长的if-else语句,不好甚至这些状态构成一个“工作流”,往往可以由一个状态执行一些操作之后,自动进入下一个状态2 解决方案一个context对象,其实就是有状态的那个对象。它包含一个状态的属性state,并有一个act()方法,它代理了s...2009-06-21 14:17:41 · 101 阅读 · 0 评论 -
责任链模式
1 解决问题有不同的问题解决者,每人只负责一部分的类型的请求(有不同的权限)此时如果有一个请求,那么需要用一堆if-else来判断究竟该给谁,不好 于是将这些问题解决者抽取出来,并用一个“责任链”串起来(甚至来说这条责任链也可以随意变换的) 2 解决方法一个请求类Request,记录着请求的各种属性。这种属性是用于判断究竟是那个问题解决者处理的依据。一个抽象的问题解...2009-06-21 15:31:16 · 94 阅读 · 0 评论 -
策略模式
1 解决方案一个固定的问题,但是有n中算法可以解决可能会根据需求随意的切换、甚至增添算法于是把易变的东西----算法,从固定的东西----问题中抽取出来2 解决方法一个抽像算法类Strategy,里面有一个do()的方法若干具体算法类ConcreatStrategy类,实现各自的do算法一个上下文Context类,它有一个St...2009-06-21 16:18:51 · 99 阅读 · 0 评论 -
中介者模式
1 解决问题一群平级的对象要互相调用(通信),于是系统变得杂乱无章的网状 因此设置一个中心节点,把网状变成星型,由中心节点控制协调。此时中心节点就叫中介者 2 解决方法一个抽象中介者一个抽象通信者一个具体中介者,它里面有各个具体通信者对象,并有一个协调的方法send()供大家调用(例如,供a调用,然后触发b、c的exe()时间、供b调用,触发c、d的exe()事件)...2009-06-21 16:33:26 · 78 阅读 · 0 评论 -
迭代器模式
public interface A{ public AIterator createIterator();}public interface AIterator{ public Object next(); public Object previous() public boolean hasNext();}public class AImpl imple...2009-06-21 16:52:36 · 71 阅读 · 0 评论 -
备忘录模式
1 解决问题:一些对象的状态可能需要“回滚”,于是用一个“memoto”保存原状态,必要的时候再返回 2 解决方法:一个备忘录的生成者Original类,它其实就是那个“可能需要回滚状态”的类。里面有一个creatMemoto()方法和一个rollbackByMemoto()方法一个备忘录类Memoto,存储Original对象的状态一个备忘录的管理类Car...2009-06-22 01:26:42 · 135 阅读 · 0 评论 -
访问者模式
1解决问题:有稳定的数据结构,易变的算法。换句话说,就是被处理的对象就那么多(稳定的数据结构),而对这些对象,可能有不同的操作(易变的算法),每种算法作用于每类对象上都产生不同结果。数据结构就是“元素”算法就是“访问者”如果在数据结构上判断“究竟是那个操作作用用它”,那么会有很长的if-else,不好。而且操作的数量很可能变化,此时就...2009-06-22 01:52:14 · 108 阅读 · 0 评论 -
解释器模式
用于文法分析中,平时很少用到,故省略2009-06-22 02:44:28 · 87 阅读 · 0 评论 -
享元模式
1 解决问题:享元的意思,就是细粒度的对象通过把系统分解成细粒度的对象,就可以共享一些资源。具体的,系统中大量相同的(或非常相近的)对象,如果每次需要一个,就new一个的话,那么内存很快被耗尽于是想到用一个“池”保存这些对象,这个池其实是一个HashMap。这样,一种对象仅仅保存一个实例,以key标识,系统需要的时...2009-06-20 14:53:24 · 97 阅读 · 0 评论 -
装饰模式
1 解决问题:一个基本的类,现在我想让它在创建的时候添加一些额外的边缘功能一个思路是修改基类,但这样不好,一方面额外功能赋予基类不合适(单一职责),另一方面修改的话也不好改于是采取另一种方式,动态的一层一层“包装”这个基类2 解决方法:一个统一的接口Component,抽取了基类本该做的事情oper()原来的基类Concrea...2009-06-20 14:52:58 · 83 阅读 · 0 评论 -
组合模式
1 解决问题树形结构的一组对象对象在不同的层次上,有的是父 有的是子 有的甚至是叶子节点这样客户端就无法统一调用它们,因为每调用一次,都要判断一下它在哪一层 于是给他们(不同层的节点,甚至是叶子节点)同一个统一的访问接口 2 解决方法一个统一接口 Component,里面定义了oper()方法,还有add()方法和remove()方法对于非叶节点,覆盖o...2009-06-20 14:10:25 · 103 阅读 · 0 评论 -
比较完善的单例模式
public class Singleton{private static final Singleton singleton = null;private Singleton(){}public static Singleton getInstance(){if (singleton== null){synchronized (Singleton.clas...2009-06-16 03:05:49 · 113 阅读 · 0 评论 -
观察者模式总结
1 一对多关系。一个被观察者,n个观察者。解耦,此时被观察者不需要知道都有哪些观察者,观察者也不需知道被观察者究竟是谁。(能够解耦的原因:程序依赖于抽象,而不是相互依赖)2 一般实现:Observer接口、Subject接口,ObserverImpl实现(多个实例,甚至可以多个子类)、SubjectImpl实现(单个)其中:Subject接口:regi...2009-06-19 09:56:23 · 112 阅读 · 0 评论 -
桥接模式总结
目的:一个系统可以从多个维度进行分类,而且每一维的变化都很大那么按每一维分离出一个父类,各维之间则是组合关系。 效果及实现要点:1.Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。2.所谓抽象和实现沿着各自维度的变化,即“子类化”它们,得到各个子类之后,便可以任意它们,从...2009-06-19 15:56:31 · 139 阅读 · 0 评论 -
模板方法模式
最常见的一种模式就是一个抽象类里定义公有的不变的代码把会变的代码抽象成一个独立的abstract方法 然后在子类里实现2009-06-20 00:37:15 · 84 阅读 · 0 评论 -
建造者模式
1 解决问题:一个复杂对象 建造它可以拆成若干个步骤这些步骤本身的顺序是固定的但是每个步骤究竟怎么做却很易变于是把“顺序”抽取出来2 解决方案:一个抽象建造器接口,定义各个“创建步骤”的方法,以及那个返回“复杂对象”的方法(其实是个工厂)若干个建造器的具体实现。一个“指挥者Dir...2009-06-20 01:23:47 · 96 阅读 · 0 评论 -
原型模式
1 解决问题一组对象,它们的属性都大同小异现在想大批量的生产这些对象2 解决方案一个抽象的对象接口,包含clone()方法几个对象的实现类,分别代表着不同“类”的对象。每类对象也都实现clone方法于是在客户端,建立每一类的对象时,只需建一个,然后用clone复制就行了...2009-06-20 01:45:38 · 79 阅读 · 0 评论 -
工厂模式系列 + 反射改进
1 简单工厂模式 一个工厂一个抽象产品类一组具体产品类工厂根据参数决定返回那个具体产品 违反开闭原则 2 工厂方法模式一个抽象工厂一个抽象产品一组具体工厂 和 与之对应的一组具体产品每个工厂负责生产它的那种产品。 3 抽象工厂方法模式一个抽象工厂一组抽象产品一组具体工厂 和 与之...2009-06-20 02:14:32 · 99 阅读 · 0 评论 -
适配器模式
1 解决问题已有一个功能类Adaptee,是可以解决a问题的类而客户端确实有一部分需要解决a问题,但是它被限制只能调用Target的接口 于是在中间加一个Adapter,用户过渡 2解决办法一个Adatpee 这是固有的类一个Target 这是固有的类中间加一个Adapter,它继承(实现)Target,同时里面有个Adaptee对象。例如Target...2009-06-20 13:41:54 · 98 阅读 · 0 评论 -
外观模式
1 解决问题层的概念: 底层有一堆类相互协作,此时如果高层要调用的话,会调用的很麻烦所以在底层之上加一个“统一的访问接口”,供上层调用。 2 解决方法public class A{ public void doA1(); public void doA2();} public class B{ public void doB1();...2009-06-20 13:53:00 · 88 阅读 · 0 评论 -
OO的原则
1 单一职责原则一个类应只完成一项功能,不要混合过多功能的“巨类”2 开放关闭原则对扩展开放,对修改关闭(例如:对函数的参数、返回值,协变)3 依赖倒转原则高层不应该依赖底层,两者应该都依赖于接口。要面向接口编程。思考:为什么面向接口编程,就可以在层间实现解耦,无论高层还是底层就都可以随意改变了呢?...2009-06-22 02:59:28 · 119 阅读 · 0 评论