设计模式之Decorator(家装篇)

最近家里搞装修,做了一套家具,需要刷一下漆,因此我就去市场找了油漆师傅和油漆徒弟两个人。
          油漆师傅主要买油漆和调油漆,油漆徒弟主要来 刷油漆(团队精神?哈哈,不禁让让我想起 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 提供了 " 即插即用 " 的方法 , 在运行期间决定何时增加何种功能 .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值