Decorator常被翻译成\"装饰\",我觉得翻译成\"油漆工\"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这两种实体在Decorator模式中是必须的. 
						作者:中国IT实验室 来源:中国IT实验室 2007年8月26日
关键字:
 
						
						
						
						
							
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())) + " 正在进行");
      }
  
    } 
  } 
  
  在上例中,我们把挖坑和钉木板都排在了打桩insert前面,这里只是举例说明额外功能次序可以任意安排.
  
  好了,Decorator模式出来了,我们看如何调用:
  
  Work squarePeg = new SquarePeg(); 
  Work decorator = new Decorator(squarePeg);
  decorator.insert(); 
  
  Decorator模式至此完成.
  
  如果你细心,会发现,上面调用类似我们读取文件时的调用:
  
  FileReader fr = new FileReader(filename);
  BufferedReader br = new BufferedReader(fr);
  
  实际上Java 的I/O API就是使用Decorator实现的,I/O变种很多,如果都采取继承方法,将会产生很多子类,显然相当繁琐.
  
  Jive中的Decorator实现
  在论坛系统中,有些特别的字是不能出现在论坛中如"打倒XXX",我们需要过滤这些"反动"的字体.不让他们出现或者高亮度显示.
  
  在IBM Java专栏中专门谈Jive的文章中,有谈及Jive中ForumMessageFilter.java使用了Decorator模式,其实,该程序并没有真正使用Decorator,而是提示说:针对特别论坛可以设计额外增加的过滤功能,那么就可以重组ForumMessageFilter作为Decorator模式了.