
Gof design
Cages
care about your craft
展开
-
外观模式
package com.jerry.design.facade.imp;public interface FacadeImp {public void test();public void testA();public void testB();public void testC();}原创 2012-02-20 11:19:28 · 568 阅读 · 0 评论 -
组合模式
将对象组合成树状层出结构,使用户能一致地使用叶子节点和分支节点package com.jerry.design.composite;import java.util.ArrayList;import java.util.List; // 测试类public class Test { public static void main(String[] args) {原创 2012-05-14 10:43:05 · 496 阅读 · 0 评论 -
模板方法模式
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中实现,但是步骤由父类定义。典型的一个应用就是jdk中的排序接口compare,Collections类中定义了排序的步骤:public static void sort(List list, Comparator c) {Object[] a = list.toArray();Arrays.sort(a, (Compa原创 2012-05-14 11:42:49 · 595 阅读 · 0 评论 -
迭代器模式
迭代器模式的定义:提供一种顺序访问一个聚合对象中各个元素的方法,但是又不会暴露该对象的内部表示。这个内部表示我的理解就是指向集合的指针,因为一般来讲遍历一个集合必须要像游标遍历结果集一样,迭代器模式就是让外界调用集合的createIterator方法来创建一个接口,这个接口暴露的方法和具体集合无关,然后通过这个接口的实现类和具体聚合对象之间的引用,把这个迭代器和具体聚合对象联系起来。packa原创 2012-05-14 09:41:49 · 593 阅读 · 0 评论 -
策略模式
策略模式就是定义一系列的算法,把他们一个一个封装起来,并使他们可以相互替换。也就是实现算法和调用端的解耦,他的核心并不是如何实现算法而是如何组织,调用这些算法。下面是个demo:package com.jerry.design.strategy; // 测试类public class Test { public static void main(String[] args) {原创 2012-05-14 13:46:43 · 524 阅读 · 0 评论 -
解释器模式
解释器模式:通过解析器对象处理一个给定的规则,把复杂的功能分离开,让客户端选择要执行的功能。下面是个小demo,巧妙之处在Context对象的处理上:package com.jerry.design.interpreter;import java.util.ArrayList;import java.util.List; // 测试类public class Test { p原创 2012-05-14 16:43:12 · 666 阅读 · 0 评论 -
装饰器模式
装饰器模式:给一个对象添加一些额外的操作,虽然此功能可以用继承实现,但装饰模式比生成子类更灵活。核心思想是动态组合,和aop很相似,关键步骤在于对装饰器类的继承。package com.jerry.design.decorator; // 测试类public class Test { public static void main(String[] args) {原创 2012-05-15 10:44:17 · 491 阅读 · 0 评论 -
状态模式
状态模式:允许在其内部状态变化的时候改变他的行为。可以理解为对象的行为其实是由他的状态来驱动的。package com.jerry.design.state; // 测试类public class Test { public static void main(String[] args) { State state = new StateA(); StateMana原创 2012-05-14 14:55:11 · 481 阅读 · 0 评论 -
备忘录模式
备忘录模式:用一个对象来存储另外一个对象的内部状态的快照,关键点是在不破坏封装的情况下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在合适的时候,把这个对象还原。package com.jerry.design.memento; // 测试类public class Test { private static Originator o = new Originat原创 2012-05-14 15:48:19 · 526 阅读 · 0 评论 -
享元模式
享元模式:运用共享技术有效地支持大量细的对象,可以避免大量非常相似的开销。在程序设计中,有时需要生成大量细度的类实例来表示数据。如果发现这些实例除了几个参数外基本上都是相同的。有时就能够受大幅度得减少需要实例化的类的数量。如果能把那些参数移到类实例的外面,在方法调用时讲它们传递进来,就可以通过共享大幅度地减少单个实例的数目。package com.jerry.design.fl原创 2012-05-14 16:22:51 · 683 阅读 · 0 评论 -
责任链模式
责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。这个定义让我们很自然地联想到了struts中的过滤器,没错,那我们自己创建一个过滤器吧:package com.jerry.design.chain;import java.util.HashMap;import java.util.原创 2012-05-15 15:48:42 · 580 阅读 · 0 评论 -
访问者模式
访问者模式:修改各元素类的前提下定义作用于这些元素的新操作,也就是动态的增加新的方法。ConcreteElementA和ConcreteElementB 就是原有的类,现在需要给ConcreteElementA增加一个方法visitElementA给ConcreteElementB增加一个方法 visitElementB,接口Visitor定义了这两个方法,那么怎么让新增的方法被调用呢原创 2012-05-15 17:08:33 · 611 阅读 · 0 评论 -
命令模式
命令模式的关键是把请求封装,调用者不必关心具体实现,只需要下达需要的命令即可,下面是个点餐例子,很好的诠释了命令模式:package com.jerry.design.command;import java.util.ArrayList;import java.util.List; // 测试类public class Test1 { public static void m原创 2012-05-11 14:20:56 · 535 阅读 · 0 评论 -
观察者模式
观察者模式的思想是有一个目标对象,这个对象发生了变化时,所以关心他变化的对象都会被通知到。下面是个典型的消息通信的例子:package com.jerry.design.observer;import java.util.ArrayList;import java.util.List; // 测试类public class Test { public static void原创 2012-05-11 09:57:43 · 506 阅读 · 0 评论 -
适配器(一)
单项适配器模式:原接口:package com.jerry.design.adapter1.imp;public interface InterfaceA {public void testA();}接口实现类:package com.jerry.design.adapter1.impl;原创 2012-02-20 11:20:27 · 551 阅读 · 0 评论 -
适配器(二)
接口A:package com.jerry.design.adapter2.imp;public interface InterfaceA {public void testA();}接口B:package com.jerry.design.adapter2.imp;public i原创 2012-02-20 11:21:25 · 550 阅读 · 0 评论 -
单例模式
饱汉模式:package com.jerry.design.singleton;public class FullSingle {private static FullSingle instance = null;private FullSingle(){}public synchronized s原创 2012-02-20 11:22:34 · 416 阅读 · 0 评论 -
简单工厂
接口类:package com.jerry.design.simpleFactory.imp;/** * * @author jerry * */public interface interfaceTest {public void test(String name);}原创 2012-02-20 11:18:09 · 393 阅读 · 0 评论 -
工厂方法模式
操作接口:package com.jerry.design.factoryMethod.imp;/** * * @author jerry * */public interface interfaceTest {public void test(String name);}原创 2012-02-20 11:23:41 · 414 阅读 · 0 评论 -
抽象工厂模式
接口类:package com.jerry.design.abstractFactory.imp;public interface DoAJob { public void doSometingLikeA();}package com.jerry.design.abstractFactory.imp;public interface DoBJob { publ原创 2012-02-29 22:37:37 · 657 阅读 · 0 评论 -
Java 设计模式分类
设计模式在粒度和抽象层次上各不相同。由于存在众多的设计模式,所以我们可以用一种方式将它们组织起来。这里,我们根据两条准则对模式进行分类,如下表所示: 第一是目的准则,即模式是用来完成什么工作的。模式依据其目的可分为创建型( Creational)、结构型( Structural)、或行为型( Behavioral )三种。创建型模式与对象的创建有关;结构型模式处理类或对象的组合转载 2012-05-10 13:57:03 · 603 阅读 · 0 评论 -
构建模式
构建模式的核心就是把构建和表示进行分离、解耦,如下例子:Part类代表一个复杂的需要构建的实体,其中有两个属性,代表需要的组件,Builder接口,用于表示需要构建的步骤方法,也可以理解为构建部分,Yw,Zw类表示不同的表示方式,也就是Part类在不同的情况下表现出来的不同view,Director类选择不同的Builder实现会得到不同的result给client,其中最核心的是Builder接原创 2012-05-10 11:36:27 · 1047 阅读 · 0 评论 -
java创建型模式总结
抽象工厂模式、原型模式、单例模式、生成器模式是java创建型模式中针对具体对象的创建模式:原型模式关注的重点是怎么样创建出一个类似的对象,方式是当然是克隆,简单理解为复制,之所以这么做是因为有“类似”这个词做对象的定语。抽象工厂模式关注重点是创建出一簇对象,这个我的理解就是这些对象在不同纬度上是有关联的,比较经典的例子就是女娲造物的故事,阳绳可以造男人、公牛等阴绳可以造女人、奶牛等,是一系原创 2012-05-10 14:43:47 · 1290 阅读 · 0 评论 -
代理模式--继承
众所周知,和aop的思想很接近,可以控制对代理对象的访问:package com.jerry.design.proxy; // 测试类public class Test { public static void main(String[] args) { OrderProxy o = new OrderProxy("book",12.00,1,"yushh"); S原创 2012-05-10 17:55:49 · 688 阅读 · 0 评论 -
中介者模式
中介者模式就是在对象之间的关系很复杂时用,名如其人,就像租房的黑中介一样,如果每个房东都拿着很多租房者的信息很麻烦,每个租房者都要拿着很多房东的信息也麻烦,所以需要一个中介来拿着这些信息,租房者只需要发出租房的请求,中介会给你介绍合适的房东,房东只需要提交房屋资料就等着中介的人带着访客看房拿钱就行了,所以租房者和房东都要拿着中介的信息,这个模式不难理解,但是中介会用收中介费,加房租等毒辣手段,所以原创 2012-05-10 16:34:49 · 655 阅读 · 0 评论 -
桥接模式
桥接模式:把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。其实我们经常用的mvc就是典型的桥接模式:package com.jerry.design.bridge; // 测试类public class Test { public static void main(String[] arg原创 2012-05-15 16:11:27 · 2479 阅读 · 0 评论