`
Cages
  • 浏览: 101495 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
访问者模式: 修改各元素类的前提下定义作用于这些元素的新操作,也就是动态的增加新的方法。ConcreteElementA和ConcreteElementB 就是原有的类,现在需要给ConcreteElementA增加一个方法 visitElementA给ConcreteElementB增加一个方法 visitElementB,接口Visitor定义了这两个方法,那么怎么让新增的方法被调用呢?于是出现了Visitor的实现类, 当然被访问了两个类也有个新名字的方法叫accept,并抽象为接口,这个入参是关键,因为这里恰好是衔接的地方, 入参是访问者接口,这也就是把访问者的方法暴漏给了被 ...
桥接模式:把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。其实我们经常用的mvc就是典型的桥接模式: package com.jerry.design.bridge; // 测试类 public class Test { public static void main(String[] args) { Dao dao = new DaoImpl(); Service service = new serviceImpl(dao); service.serviceMethod(); ...
责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。这个定义让我们很自然地联想到了struts中的过滤器,没错,那我们自己创建一个过滤器吧: package com.jerry.design.chain; import java.util.HashMap; import java.util.Map; // 测试类 public class Test { public static void main(String[] args) { Request req = new Re ...
装饰器模式:给一个对象添加一些额外的操作,虽然此功能可以用继承实现,但装饰模式比生成子类更灵活。核心思想是动态组合,和aop很相似,关键步骤在于对装饰器类的继承。 package com.jerry.design.decorator; // 测试类 public class Test { public static void main(String[] args) { Component component = new ConcreteComponent(); component.operation(); Syst ...
解释器模式:通过解析器对象处理一个给定的规则,把复杂的功能分离开,让客户端选择要执行的功能。下面是个小demo,巧妙之处在Context对象的处理上: package com.jerry.design.interpreter; import java.util.ArrayList; import java.util.List; // 测试类 public class Test { public static void main(String[] args) { String number = "200"; Context con ...
享元模式:运用共享技术有效地支持大量细的对象,可以避免大量非常相似的开销。 在程序设计中,有时需要生成大量细度的类实例来表示数据。如果发现这些实例除了几个参数外基本上都是相同的。有时就能够受大幅度得减少需要实例化的类的数量。如果能把那些参数移到类实例的外面,在方法调用时讲它们传递进来,就可以通过共享大幅度地减少单个实例的数目。 package com.jerry.design.flyweight; abstract class Conn { public abstract void getConn(); }package com.jerry.design.flyweight; ...
备忘录模式: 用一个对象来存储另外一个对象的内部状态的快照,关键点是在不破坏封装的情况下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在合适的时候,把这个对象还原。 package com.jerry.design.memento; // 测试类 public class Test { private static Originator o = new Originator(); private static Caretaker c = new Caretaker(); public static void main(String[] args ...
状态模式:允许在其内部状态变化的时候改变他的行为。可以理解为对象的行为其实是由他的状态来驱动的。 package com.jerry.design.state; // 测试类 public class Test { public static void main(String[] args) { State state = new StateA(); StateMan ...
策略模式就是定义一系列的算法,把他们一个一个封装起来,并使他们可以相互替换。也就是实现算法和调用端的解耦,他的核心并不是如何实现算法而是如何组织,调用这些算法。下面是个demo: package com.jerry.design.strategy; // 测试类 public class Test { public static void main(String[] args) { ConcreteStrategyA concreteStrategyA = new ConcreteStrategyA(); Context context = new Context(conc ...
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中实现,但是步骤由父类定义。典型的一个应用就是jdk中的排序接口compare,Collections类中定义了排序的步骤: public static <T> void sort(List<T> list, Comparator<? super T> c) {Object[] a = list.toArray();Arrays.sort(a, (Comparator)c);ListIterator i = list.listIterator();for (int j=0; j<a.len ...
将对象组合成树状层出结构,使用户能一致地使用叶子节点和分支节点 package com.jerry.design.composite; import java.util.ArrayList; import java.util.List; // 测试类 public class Test { public static void main(String[] args) { Component root = new Composite(); Component c1 = new Composite(); Component c2 = new Composite(); ...
《Hibernate 关系映射》是我很早之前收集、总结整理的,在此也发上来 希望对大家有用。因为是很早之前写的,不当之处请指正。 一、概念: 关系:名词,事物之间相互作用、相互联系的状态。 关联:名词:表示对象(数据 ...
和《Hibernate 关系映射 收集、总结整理》 一样,本篇文章也是我很早之前收集、总结整理的,在此也发上来 希望对大家有用。因为是很早之前写的,不当之处请指正。 1、缓存:缓存是什么,解决什么问题? 位于速度相差较 ...
迭代器模式的定义:提供一种顺序访问一个聚合对象中各个元素的方法,但是又不会暴露该对象的内部表示。这个内部表示我的理解就是指向集合的指针,因为一般来讲遍历一个集合必须要像游标遍历结果集一样,迭代器模式就是让外界调用集合的createIterator方法来创建一个接口,这个接口暴露的方法和具体集合无关,然后通过这个接口的实现类和具体聚合对象之间的引用,把这个迭代器和具体聚合对象联系起来。 package com.jerry.design.iterator; import java.util.ArrayList; import java.util.List; // 测试类 public cl ...
命令模式的关键是把请求封装,调用者不必关心具体实现,只需要下达需要的命令即可,下面是个点餐例子,很好的诠释了命令模式: package com.jerry.design.command; import java.util.ArrayList; import java.util.List; // 测试类 public class Test1 { public static void main(String[] args) { //服务员拿着菜单走过来 Waiter w = new Waiter(); //点鱼香肉丝 Command c1 = new Yxr ...
Global site tag (gtag.js) - Google Analytics