`
gary0416
  • 浏览: 334966 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子 AbstractExpression.java package com.gary.designpattern.interpreter; /** * 解释操作接口 * @author gary * */ public interface AbstractExpression { public void interpret(int data); }   LowerCaseExpression.java package com.gary.designpattern ...

Mediator模式

用一个中介对象来封装一系列的对象交互,使各对象不需要显示地相互调用     Mediator.java package com.gary.designpattern.mediator; /** * 中介者 * @author gary * */ public interface Mediator { public void send(String message, Person person); }   MediatorImpl.java package com.gary.designpattern.mediator; public clas ...
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这个对象连成一条链,沿着这条链传递该请求,直到有一个对象处理它为止     Handler.java package com.gary.designpattern.cor; /** * 处理请求的接口 * @author gary * */ public abstract class Handler { protected Handler handler; public void setHandler(Handler handler){ this.handler = ha ...
将对象组合成树形结构以表示 部分-整体 的层次结构,使用户对单个对象和组合对象的使用具有一致性适用场合:忽略组合对象与单个对象的不同,统一使用组合结构中的所有对象   Company.java package com.gary.designpattern.composite; /** * 公司类 * @author gary * */ public abstract class Company { protected String name; public Company(){ } public Company(String name) { ...
不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后可将该对象恢复到原先保存的状态适用场合:功能较复杂,但需要维护或记录属性历史,或需要保存的属性只是众多属性的一小部分   Originator.java package com.gary.designpattern.memento; /** * 发起人 * @author gary * */ public class Originator { //需要保存的属性 private String messageA; private String messageB; pu ...
不同状态有不同的行为适用场合:控制一个对象状态转换的条件表达式过于复杂时   State.java package com.gary.designpattern.state; /** * 抽象状态 * @author gary * */ public abstract class State { public abstract void greeting(Greeting g); }   MorningState.java package com.gary.designpattern.state; /** * 早上状态 * @autho ...
定义了一种一对多的依赖关系,让多个观察者对象同时去监听某一主题对象,这个主题对象发生变化时,会通知所有的观察者对象,使它们自动更新自己适用场合:一个对象的改变需要同时改变其它对象,且不知多少个有待改变   Hello.java package com.gary.designpattern.observer; import java.util.Observable; /** * 继承java.util.Observable * 提供add/delete ovserver方法 * 提供notisfy所有observer的方法 * @author gary * ...
通过使用抽象类等,定义一个算法骨架,而将一些步骤延迟到子类中,使子类可以不改变一个算法的结构即可重新定义该算法的特定步骤.适用场合:要完成某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同.   Template.java package com.gary.designpattern.template; /** * 抽象模板 * @author gary * */ public abstract class Template { /** * 模板方法,算法骨架 */ public void sayHello( ...
动态给一个对象添加一些额外的职责,即为已有功能动态添加更多功能   SayHello.java package com.gary.designpattern.decorator; /** * SayHello * @author gary * */ public class SayHello { public void sayHello(){ System.out.println("sayHello:"); } }   Decorator.java package com.gary.designpattern.decor ...
定义了算法家族,分别封装起来,让它们之间可以相互替代,不影响调用   Strategy.java package com.gary.designpattern.strategy; public interface Strategy { public void hello(); }   StrategyImplA.java package com.gary.designpattern.strategy.impl; import com.gary.designpattern.strategy.Strategy; /** * 算法,动作等A * @aut ...
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更容易使用.很常用,较好体现了依赖倒转原则和迪米特法则思想.   Facade.java package com.gary.designpattern.facade; /** * Facade类,需要了解子功能,并组合 * @author gary * */ public class Facade { /** * 组合hello方法,供其它方法调用 */ public void sayHello(){ System.out.println("s ...
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。 Prototype.java package com.gary.designpattern.prototype; /** * 此模式实现简单,因为Java提供clone方法 * 1.实现java.lang.Cloneable接口 * 2.覆盖clone方法 * java clone详解: * 传送 ...
为其他对象提供一种代理以控制对这个对象的访问等 Service.java package com.gary.designpattern.proxy; /** * 定义公用接口,这样使用RealService的地方都可以使用Proxy * @author gary * */ public interface Service { public void sayHello(); }   RealService.java package com.gary.designpattern.proxy; /** * 代理对象 * @author gary ...
将一个类的接口转换成客户希望的另外一个接口,使原本由于接口不兼容而不能在一起工作的类可以一起工作 Adaptee.java package com.gary.designpattern.adapter; /** * 需要适配的目标 * @author gary * */ public interface Adaptee { public void doSomethingSpecial(); }   AdapteeImpl.java package com.gary.designpattern.adapter.impl; import com.ga ...
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,隐藏具体构建过程.   Builder.java package com.gary.designpattern.builder; /** * 抽出整个build过程 * @author gary * */ public interface Builder { public void build ...
Global site tag (gtag.js) - Google Analytics