好了,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模式了。
  所以,我们在分辨是否真正是Decorator模式,以及会真正使用Decorator模式,一定要把握好Decorator模式的定义,以及其中参与的角色(Decoratee 和Decorator)。