- 浏览: 102153 次
- 性别:
- 来自: 北京
最新评论
文章列表
访问者模式:
修改各元素类的前提下定义作用于这些元素的新操作,也就是动态的增加新的方法。ConcreteElementA和ConcreteElementB 就是原有的类,现在需要给ConcreteElementA增加一个方法
visitElementA给ConcreteElementB增加一个方法 visitElementB,接口Visitor定义了这两个方法,那么怎么让新增的方法被调用呢?于是出现了Visitor的实现类,
当然被访问了两个类也有个新名字的方法叫accept,并抽象为接口,这个入参是关键,因为这里恰好是衔接的地方,
入参是访问者接口,这也就是把访问者的方法暴漏给了被 ...
- 2012-05-15 17:08
- 浏览 722
- 评论(0)
桥接模式:把抽象(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(); ...
- 2012-05-15 16:11
- 浏览 736
- 评论(0)
责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。这个定义让我们很自然地联想到了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 ...
- 2012-05-15 15:48
- 浏览 644
- 评论(0)
装饰器模式:给一个对象添加一些额外的操作,虽然此功能可以用继承实现,但装饰模式比生成子类更灵活。核心思想是动态组合,和aop很相似,关键步骤在于对装饰器类的继承。
package com.jerry.design.decorator;
// 测试类
public class Test {
public static void main(String[] args) {
Component component = new ConcreteComponent();
component.operation();
Syst ...
- 2012-05-15 10:44
- 浏览 626
- 评论(0)
解释器模式:通过解析器对象处理一个给定的规则,把复杂的功能分离开,让客户端选择要执行的功能。下面是个小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 ...
- 2012-05-14 16:43
- 浏览 742
- 评论(0)
享元模式:运用共享技术有效地支持大量细的对象,可以避免大量非常相似的开销。
在程序设计中,有时需要生成大量细度的类实例来表示数据。如果发现这些实例除了几个参数外基本上都是相同的。有时就能够受大幅度得减少需要实例化的类的数量。如果能把那些参数移到类实例的外面,在方法调用时讲它们传递进来,就可以通过共享大幅度地减少单个实例的数目。
package com.jerry.design.flyweight;
abstract class Conn {
public abstract void getConn();
}package com.jerry.design.flyweight; ...
- 2012-05-14 16:22
- 浏览 672
- 评论(0)
备忘录模式:
用一个对象来存储另外一个对象的内部状态的快照,关键点是在不破坏封装的情况下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在合适的时候,把这个对象还原。
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 ...
- 2012-05-14 15:48
- 浏览 708
- 评论(0)
状态模式:允许在其内部状态变化的时候改变他的行为。可以理解为对象的行为其实是由他的状态来驱动的。
package com.jerry.design.state;
// 测试类
public class Test {
public static void main(String[] args) {
State state = new StateA();
StateMan ...
- 2012-05-14 14:55
- 浏览 726
- 评论(0)
策略模式就是定义一系列的算法,把他们一个一个封装起来,并使他们可以相互替换。也就是实现算法和调用端的解耦,他的核心并不是如何实现算法而是如何组织,调用这些算法。下面是个demo:
package com.jerry.design.strategy;
// 测试类
public class Test {
public static void main(String[] args) {
ConcreteStrategyA concreteStrategyA = new ConcreteStrategyA();
Context context = new Context(conc ...
- 2012-05-14 13:46
- 浏览 708
- 评论(0)
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中实现,但是步骤由父类定义。典型的一个应用就是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 ...
- 2012-05-14 11:42
- 浏览 581
- 评论(0)
将对象组合成树状层出结构,使用户能一致地使用叶子节点和分支节点
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(); ...
- 2012-05-14 10:43
- 浏览 619
- 评论(0)
《Hibernate 关系映射》是我很早之前收集、总结整理的,在此也发上来 希望对大家有用。因为是很早之前写的,不当之处请指正。
一、概念:
关系:名词,事物之间相互作用、相互联系的状态。
关联:名词:表示对象(数据 ...
- 2012-05-14 10:21
- 浏览 979
- 评论(0)
和《Hibernate 关系映射 收集、总结整理》 一样,本篇文章也是我很早之前收集、总结整理的,在此也发上来 希望对大家有用。因为是很早之前写的,不当之处请指正。
1、缓存:缓存是什么,解决什么问题?
位于速度相差较 ...
- 2012-05-14 10:19
- 浏览 812
- 评论(0)
迭代器模式的定义:提供一种顺序访问一个聚合对象中各个元素的方法,但是又不会暴露该对象的内部表示。这个内部表示我的理解就是指向集合的指针,因为一般来讲遍历一个集合必须要像游标遍历结果集一样,迭代器模式就是让外界调用集合的createIterator方法来创建一个接口,这个接口暴露的方法和具体集合无关,然后通过这个接口的实现类和具体聚合对象之间的引用,把这个迭代器和具体聚合对象联系起来。
package com.jerry.design.iterator;
import java.util.ArrayList;
import java.util.List;
// 测试类
public cl ...
- 2012-05-14 09:41
- 浏览 667
- 评论(0)
命令模式的关键是把请求封装,调用者不必关心具体实现,只需要下达需要的命令即可,下面是个点餐例子,很好的诠释了命令模式:
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 ...
- 2012-05-11 14:20
- 浏览 682
- 评论(0)