随笔分类 -  Java设计模式

摘要:import java.util.ArrayList;import java.util.List;//被观察者接口interface Watched{ public void addWatcher(Watcher watcher); public void removeWatcher(Watcher watcher); public void notifyAllWatchers(String str);}//被观察者实现类class ConcreteWatched implements Watched{ List<Watcher> watchers=new ArrayL... 阅读全文
posted @ 2012-01-08 19:46 一直在等 阅读(309) 评论(0) 推荐(0) 编辑
摘要:命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否执行,何时被执行以及是怎么被执行的。系统支持命令的撤消。说白了就是把一个 处理行为 作为参数传入方法例子: 1 interface Command{ 2 public void process(int[] target); 3 } 4 5 //打印数组元素 6 class PrintArray implements Command{ 7 @O... 阅读全文
posted @ 2011-12-19 20:41 一直在等 阅读(312) 评论(0) 推荐(0) 编辑
摘要:代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下,客户不想或者不能够直接引用一个对象,代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可以并不知道真正的被代理对象,而仅仅持有一个被代理对象的接口,这时候代理对象不能够创建被代理对象,被代理对象必须有系统的其他角色代为创建并传入。例子: 1 interface Demo{ 2 public void action(); 3 } 4 5 class RealDemo implements Demo{ ... 阅读全文
posted @ 2011-12-18 12:24 一直在等 阅读(268) 评论(0) 推荐(0) 编辑
摘要:模板方法模式准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。例子: 1 abstract class Person{ 2 public void work(){ 3 System.out.println("I am working"); 4 } 5 public abstract void say(); 6 } 7 8 class Worker extends ... 阅读全文
posted @ 2011-12-16 21:11 一直在等 阅读(256) 评论(0) 推荐(0) 编辑
摘要:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。动态给一个对象增加功能,这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。 1 interface Person{ 2 public void eat(); 3 } 4 5 class Man implements Person{ 6 public void eat() { 7 System.out.println("吃饭"); 8 } 9 }10 11 class Decorator implements Person{12 ... 阅读全文
posted @ 2011-12-11 15:20 一直在等 阅读(537) 评论(0) 推荐(0) 编辑
摘要:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。例子:比如你要做山寨产品,更新一定要快,什么流行生产什么,但工厂还是那个工厂。 1 abstract class Product{ 2 public abstract void beforeProducted(); 3 public abstract void beforeSelled(); 4 } 5 6 class House extends Product{ 7 @Overrid... 阅读全文
posted @ 2011-12-08 16:19 一直在等 阅读(249) 评论(0) 推荐(0) 编辑
摘要:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返回一个合适的实例给客户端。 1 interface ICar{ 2 public void startCar(); 3 public void stopCar(); 4 public void fixCar(); 5 } 6 7 class CarAdapter implements ICar{ 8 public void fixCar() {} 9 public void startCar() {}10 public... 阅读全文
posted @ 2011-12-08 13:42 一直在等 阅读(315) 评论(0) 推荐(0) 编辑
摘要:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。 1 class Singleton { 2 private static Singleton sing; 3 4 private Singleton() { 5 } 6 7 public static Singleton getInstance() { 8 if (sing == null) { 9 sing = new Singleton();10 }11 ... 阅读全文
posted @ 2011-12-07 21:42 一直在等 阅读(410) 评论(0) 推荐(0) 编辑
摘要:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。例子:跟MM用QQ聊天,一定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。 1 class Prototype implements Cloneable{ 2 private String name; 3 public String getName() ... 阅读全文
posted @ 2011-12-07 21:14 一直在等 阅读(215) 评论(0) 推荐(0) 编辑
摘要:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行得建造过程。例子: 1 class House{ 2 private String base; 3 private String wall; 4 private String roof; 5 public String getBase() { 6 return base; 7 } 8 public void setBase(Strin... 阅读全文
posted @ 2011-12-07 18:02 一直在等 阅读(321) 评论(0) 推荐(0) 编辑
摘要:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。例子:请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。 1 interface Sample{ 2 public void say(); 3 } 4 5 class SampleA implements Sample{ 6 public void sa... 阅读全文
posted @ 2011-12-06 21:00 一直在等 阅读(268) 评论(0) 推荐(0) 编辑
摘要:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。例子:追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 1 interface Sample{ 2 public void say(); 3 } 4 5 class SampleA implements Sample{ 6 public void say(){ 7 Syst... 阅读全文
posted @ 2011-12-06 20:55 一直在等 阅读(265) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示