设计模式之Decorator——家装篇

原创 2004年10月16日 11:30:00

设计模式之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提供了"即插即用"的方法,在运行期间决定何时增加何种功能.

设计模式之Decorator(家装篇)

最近家里搞装修,做了一套家具,需要刷一下漆,因此我就去市场找了油漆师傅和油漆徒弟两个人。           油漆师傅主要买油漆和调油漆,油漆徒弟主要来 刷油漆(团队精神?哈哈,不禁让让我想起 CS ...
  • shuihan20e
  • shuihan20e
  • 2008年05月21日 13:51
  • 268

设计模式之Decorator——家装篇(原创)

设计模式之Decorator——家装篇 最近家里搞装修,做了一套家具,需要刷一下漆,因此我就去市场找了油漆师傅和油漆徒弟两个人。油漆师傅主要买油漆和调油漆,油漆徒弟主要来刷油漆(团队精神?哈哈,不禁让...
  • lxgljj
  • lxgljj
  • 2004年10月10日 09:02
  • 2444

设计模式——装饰模式(Decorator)

要想正确理解设计模式,首先必须明确它是为了解决什么问题而提出来的。 设计模式学习笔记 ——Shulin 转载请注明出处:http://blog.csdn.net/zhshulin 1、概念 ...
  • u012909091
  • u012909091
  • 2014年08月18日 20:23
  • 18708

研磨设计模式 之 装饰模式(Decorator)1——跟着cc学设计系列

22.1  场景问题 22.1.1  复杂的奖金计算        考虑这样一个实际应用:就是如何实现灵活的奖金计算。 奖金计算是相对复杂的功能,尤其是对于业务部门的奖金计算方式,是非常复杂的,...
  • u013019926
  • u013019926
  • 2013年12月05日 10:10
  • 677

浅谈JAVA设计模式之——装饰模式(Decorator)

一、概述 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。 二、适用性 1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。 2.处...
  • l1028386804
  • l1028386804
  • 2015年05月03日 23:56
  • 2083

Java IO 系列----流和Decorator设计模式

·在程序中用一个对象(the Decorators)包装另外的一个对象,这是一种被称为Decorator的设计模式。·如果要设计自己的IO包装类,这个类需要继承以FilterXXX命名的类,例如,设计...
  • yitongfling
  • yitongfling
  • 2011年04月14日 17:56
  • 433

[置顶] 国内首部Java多线程设计模式原创作品《Java多线程编程实战指南(设计模式篇)》已出版

国内首部Java多线程设计模式原创作品《Java多线程编程实战指南(设计模式篇)》已由电子工业出版社出版。本书从理论到实战,用生活化的实例和通俗易懂的语言全面介绍Java多线程编程的"三十六计"——多...
  • viscent_huang
  • viscent_huang
  • 2015年11月18日 11:21
  • 4418

设计模式之八 --- 装饰模式(Decorator)

【1】基本概念           装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 【2】简单分析           我们先来...
  • cjjky
  • cjjky
  • 2012年04月19日 20:12
  • 14371

《Java多线程编程实战指南(设计模式篇)》答疑总结(陆续更新)

博客分类: 《Java多线程编程实战指南(设计模式篇)》答疑开展以来,不少网友提出的问题既有与本书有关的话题,也有Java多线程编程基础知识的相关话题。由于时间关系,对于重复的问题我...
  • dotedy
  • dotedy
  • 2015年11月27日 14:03
  • 894

设计模式简单代码之Decorator模式(小孩吃饭篇)

/***************************************************************************************************...
  • dylgsy
  • dylgsy
  • 2006年07月04日 18:39
  • 2080
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式之Decorator——家装篇
举报原因:
原因补充:

(最多只允许输入30个字)