Design Pattern
iteye_2309
这个作者很懒,什么都没留下…
展开
-
Strategy
[color=green]有一个鸟类(Bird),它有一系列的方法,显示(display)方法,飞行(fly)方法,睡觉(sleep)方法,但是不同的鸟的外表(display方法实现)不一样,有的鸟不会飞,有的鸟站着睡……下面用策略模式实现[/color][color=darkred]策略模式:定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户[/co...2011-10-09 21:52:30 · 60 阅读 · 0 评论 -
Abstract Factory
下面以Mac和PC的CPU和RAM为例,代码如下:Cpu.java package com.flyingh.icpu;public interface Cpu { String cpuInfo();} MacCpu.java package com.flyingh.cpu;import com.flyingh.icpu.Cpu;pu...2011-11-21 22:00:50 · 70 阅读 · 0 评论 -
Chain Of Responsibility
Chain Of Responsibility Pattern:很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使系统可以在不影响客户端的情况下动态的重新组织链和分配责任。1).Handler.java package com.flyinh.ihandle...2011-11-21 23:05:20 · 56 阅读 · 0 评论 -
Bridge
桥梁模式的用意是"将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化"。这句话有三个关键词,也就是抽象化、实现化和脱耦.Lock.java package com.flyingh.ilock;public interface Lock { void lock(); void unlock();} L...2011-11-22 15:05:34 · 71 阅读 · 0 评论 -
Builder
Builder Pattern:可以将一个产品的内部表象与产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。Mobile.java package com.flyingh.product;import java.util.List;public class Mobile { private List<String> list;...2011-11-22 16:38:39 · 65 阅读 · 0 评论 -
Flyweight
享元模式以共享的方式高效地支持大量的细粒度对象.1).FlyweightDemo.java package com.flyingh.demo;public class FlyweightDemo { public static void main(String[] args) { String str1 = "abc"; String str2 = "a" + ...2011-11-23 18:38:25 · 67 阅读 · 0 评论 -
Memento
Memento Pattern:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。Memento.java public class Memento { private String state; public Memento(String state) { super(); this.state...2011-11-23 21:56:28 · 70 阅读 · 0 评论 -
Prototype
Prototype Pattern:就是通过复制现在已经存在的对象来创建一个新的对象。当创建给定类的实例的过程很昂贵或很复杂时,就使用它。Name.javapackage com.flyingh.dp.prototype;import java.io.Serializable;@SuppressWarnings("serial")public class Name...2011-11-24 11:32:00 · 87 阅读 · 0 评论 -
Mediator
Mediator Pattern: 用一个中介对象来封装一系列关于对象交互行为.为何使用Mediator?各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉及到修改很多其他对象的行为,如果使用Mediator模式,可以使各个对象间的耦合松散,只需关心和 Mediator的关系,使多对多的关系变成了一对多的关系,可以降低系统的复杂性,提高可...2011-11-24 16:22:25 · 92 阅读 · 0 评论 -
Visitor
Visitor Pattern:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作(double dispatch)。Acceptable.java package com.flyingh.acceptable;import com.flyingh.visitable.Visitor;public interface ...2011-11-24 17:37:57 · 99 阅读 · 0 评论 -
Proxy
Proxy Pattern:对其他对象提供一种代理以控制对这个对象的访问,它的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用1)Subject.java package com.flyingh.isubject;public interface Subject ...2011-11-18 18:47:44 · 88 阅读 · 0 评论 -
State
State Pattern:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类.状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化下面以Player的几种状态为例,代码如下:State.java package com.flyingh.istate;public...2011-11-18 15:57:55 · 114 阅读 · 0 评论 -
Composite
Composite Pattern:意图是将对象组合成树形结构以表示部分-整体的层次结构,它使得用户对单个对象和组合对象的使用具有一致性。下面以Iterator中的例子为例,不过,这里Department中除了含有Clerk外,也可以再含有子Department,它含有的子Department中也可以含有Clerk和Department,代码如下:DepartComponent.java...2011-11-17 17:09:17 · 383 阅读 · 0 评论 -
Singleton
下面是Singleton模式的三种实现:饿汉式:package com.flyingh.test;public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { super(); // TODO Auto-generated ...2011-10-09 22:38:00 · 186 阅读 · 0 评论 -
Observer
观 察 者 模 式 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。下面是House.java的代码: package com.flyingh.observable;import java.util.Observable;public class House extends Observable { priva...2011-11-12 21:30:00 · 56 阅读 · 0 评论 -
Decorator
装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,以达到特定的目的装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。1.下面是Food.java的代码: package com.flyingh.abs;public abstract class Food { protected Food food;...2011-11-12 23:09:07 · 85 阅读 · 0 评论 -
Factory Method
Simple Factory:以Fruit为例,以下是实现代码:Fruit.java package com.flyingh.iproduct;public interface Fruit { } Apple.java package com.flyingh.product;import com.flyingh.iproduct.Fruit...2011-11-13 20:44:08 · 66 阅读 · 0 评论 -
Command
1).下面以Boss和Clerk为例:Clerk.java代码如下: package com.flyingh.receiver;public class Clerk { public void action() { System.out.println("**************"); }} Command.java代码如下: pac...2011-11-14 23:06:00 · 68 阅读 · 0 评论 -
Adapter
Adapter Pattern:将一个类的接口,转换成客户所期望的另一个接口。1).Target.java package com.flyingh.target;public interface Target { void request();} Adaptee.java package com.flyingh.adaptee;publ...2011-11-15 21:43:44 · 63 阅读 · 0 评论 -
Facade
Facade Pattern:为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。他是为子系统中的一组接口所提供的一个一致的界面Tv.java package com.flyingh.bean;public class Tv { public void turnOn() { System.out.println("turn...2011-11-15 23:00:35 · 97 阅读 · 0 评论 -
Template Method
模板方法模式:在一个方法中定义一个算法的骨架,而将一些实现步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。AbstractClass.javapackage com.flyingh.abs;public abstract class AbstractClass { public final void templateMe...2011-11-16 11:43:24 · 72 阅读 · 0 评论 -
Iterator
Iterator Pattern:其意图是提供一种方法顺序访问一个聚合对象中得各个元素,而又不需要暴露该对象的内部表示.下面以Boss输出各个Department中的所有Clerk为例(各个部门对Clerk的内部表示不同,如有的用Array,有的用List,Map......):Clerk.javapackage com.flyingh.bean;import com.f...2011-11-16 16:56:15 · 107 阅读 · 0 评论 -
Interpreter
Interpreter Pattern:其意图是给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子.Expression.java package com.flyingh.dp.interpreter;public abstract class Expression { public abstract int interpret(Con...2011-11-24 21:19:59 · 100 阅读 · 0 评论