这个比较好理解。
定义:
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。
package Decorator;
/**
* 定义一个对象接口,可以给这些对象动态地添加职责。
* @author Administrator
*
*/
public interface Work{
public void insert();
}
package Decorator;
/**
* 接口Work有一个具体实现:插入方形桩
* @author Administrator
*
*/
public class SquarePeg implements Work{
public void insert(){
System.out.println("方形桩插入");
}
}
package Decorator;
import java.util.ArrayList;
import java.util.ListIterator;
/**
*
*
*
* 现在有一个应用:需要在桩打入前,挖坑,在打入后,在桩上钉木板,这些额外的功能是动态,可能随意增加调整修改,
* 比如,可能又需要在打桩之后钉架子(只是比喻).
* 那么我们使用Decorator模式,这里方形桩SquarePeg是decoratee(被刷油漆者),
* 我们需要在decoratee上刷些"油漆",这些油漆就是那些额外的功能.
*
* @author Administrator
*
*/
public class Decorator implements Work {
private Work work;
// 额外增加的功能被打包在这个List中
private ArrayList others = new ArrayList();
// 在构造器中使用组合new方式,引入Work对象;
public Decorator(Work work) {
this.work = work;
others.add("挖坑");
others.add("钉木板");
}
public void insert() {
newMethod();
}
// 在新方法中,我们在insert之前增加其他方法,这里次序先后是用户灵活指定的
public void newMethod() {
otherMethod();
work.insert();
}
public void otherMethod() {
ListIterator listIterator = others.listIterator();
while (listIterator.hasNext()) {
System.out.println(((String) (listIterator.next())) + " 正在进行");
}
}
}
package Decorator;
/**
* 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。
* @author Administrator
*
*/
public class Test {
public static void main(String args[]){
Work squarePeg = new SquarePeg();
Work decorator = new Decorator(squarePeg);
decorator.insert();
}
}