┆ 回首页
 
站内资源搜索:
┆ 将本文寄给朋友  

设计模式之Decorator——家装篇

 

 


〖 作者:GaryFeng 〗〖 大小:20k 〗〖 发布日期:2006-04-07 〗〖 浏览:675 〗

 

   最近家里搞装修,做了一套家具,需要刷一下漆,因此我就去市场找了油漆师傅和油漆徒弟两个人。

    油漆师傅主要买油漆和调油漆,油漆徒弟主要来刷油漆(团队精神?哈哈,不禁让让我想起CS,你先冲,我拣菜。)。

1、在这里,我们先把这个油漆工作定义成一个接口类:

public interface Work{
    public void brush(); //刷油漆
}

2、因为油漆师傅和油漆徒弟的任务是刷油漆,因此他们要对Work接口进行实现:
A:油漆徒弟
     刷油漆的工作主要是由油漆徒弟来完成,所以我们把油漆徒弟定义成Brusher(油漆师傅在一旁说:"徒弟吗,就是要多干活。",油漆徒弟小声嘀咕:"多你个头。")。

public class Brusher implements Work{
  public void brush() {
    System.out.println("刷油漆");
  }
}


B:油漆师傅
我们把油漆师傅定义成Decorator。
public class Decorator implements Work{
  private Work work;
//油漆师傅的工作被放置在这个List中

  private ArrayList prework = new ArrayList();
//油漆师傅的默认工作
  public Decorator(Work work) {
    this.work = work;
    prework.add("买油漆");
    prework.add("调油漆");
  }
 
  public void brush() {//刷油漆, 油漆师傅也要实现此方法
    newWork();         //当油漆师傅接到活,就开始一个新的工作
  }
 
//新的工作
  public void newWork() {
    preWork();      //油漆师傅做的前期辅助工作
    work.brush();   //让徒弟干的刷油漆的工作
  }
 
//油漆师傅做的前期辅助工作
  public void preWork() {
    ListIterator listIterator = prework.listIterator();
    while (listIterator.hasNext()) {
      System.out.println( ( (String) (listIterator.next())) + "完成");
    }
  }

3、编写测试类:

public class test {

  public static void  main(String args[]) {

    Work bursher = new Brusher();

    Work decorator = new Decorator(bursher); 

    decorator.brush();

   //我把活交给油漆师傅,油漆师傅下来再把实际刷油漆的工作指派给油漆徒弟干

  }
 }

4、说明:
A:代码只用来学习Decorator模式,要运行的话,必须要做一点改动。

B:在这过程中,我只和油漆师傅打交道,具体的刷油漆那是由油漆师傅和油漆徒弟之间的事,我是不用关心的。

C:使用Decorator的理由是:这些功能需要由用户动态决定加入的方式和时机.Decorator提供了"即插即用"的方法,在运行期间决定何时增加何种功能.

来源: http://garyfeng.blogchina.com/index.html


 严禁发表涉及封建迷信、国家政治等敏感问题的内容
 ■ 对本文的评价(带 * 为必填内容,400字以内)    严禁发表涉及封建迷信、国家政治等敏感问题的内容。

* 您的姓名 
您的电子邮件 
您的个人主页 

*
您的评价 

     

 ■ 以往的评价







以上文章版权由原作者所有。未经同意,不得将其任何一部分复制、转载、发布等未授权操作。


Java学习室 — 陈伟波个人主页
E-mail: zz3zcwb@sina.com
COPY RIGHT 2005