标签:
动态地给一个对象添加一些额外的功能.
- 动态、透明的方式给单个对象添加职责。
- 如果不适合适用子类来进行扩展的时候,可以考虑适用装饰模式。
- 避免子类数目爆炸性增长。

- Component: 定义一个对象接口,可以给这些对象动态地添加职责.
- ConcreteComponent: 定义一个对象,可以给这个对象添加职责.
- Decorator: 持有一个指向Component对象的引用,并定义一个与Component的接口一致的接口.
- ConcreteComponent: 向组件添加职责.
- 比静态继承更灵活.
- 避免在层次结果高层的类有太多的特征.
- 产生许多小对象,增加对象复杂度,,不易排错.
- Java中的I/O流
- 面向切面编程AOP(思想相似)
一个软件公司由员工Employee组成,员工又分为开发人员Dev、领导Leader、经理Manager、QA部门领导QALeader。Dev职责是开发代码;QALeader职责不但能开发代码,而且能设计测试案例,写测试报告;Manager职责还能开发框架,发布版本。

Employee类
public abstract class Employee {public abstract void doSomething();}
Dev类
public class Dev extends Employee {@Overridepublic void doSomething() {// TODO Auto-generated method stubwriteCode();}private void writeCode() {// TODO Auto-generated method stubSystem.out.println("I‘m a programer,complete the code!");System.out.println("---------------------------------------");}}
Leader类
public abstract class Leader extends Employee {private Employee person;public Leader(Employee person) {super();this.person = person;}@Overridepublic void doSomething() {person.doSomething();}}
Manager类
public class Manager extends Leader {public Manager(Employee person) {super(person);// TODO Auto-generated constructor stub}public void doSomething(){begin();super.doSomething();end();}private void begin() {// TODO Auto-generated method stubSystem.out.println("Design the framework!");System.out.println("---------------------------------------");}private void end() {// TODO Auto-generated method stubSystem.out.println("Release the verion!");System.out.println("---------------------------------------");}}
QALeader类
public class QALeader extends Leader {public QALeader(Employee person){super(person);}@Overridepublic void doSomething() {// TODO Auto-generated method stubbegin();super.doSomething();end();}private void end() {// TODO Auto-generated method stubSystem.out.println("Write the test reporter");System.out.println("---------------------------------------");}private void begin() {// TODO Auto-generated method stubSystem.out.println("Write the test cases!");System.out.println("---------------------------------------");}}
输出结果:
========leader1 doSomething==========
Write the test cases!
---------------------------------------
I‘m a programer,complete the code!
---------------------------------------
Write the test reporter
---------------------------------------
========leader2 doSomething==========
Design the framework!
---------------------------------------
Write the test cases!
---------------------------------------
I‘m a programer,complete the code!
---------------------------------------
Write the test reporter
---------------------------------------
Release the verion!
---------------------------------------
标签:
原文地址:http://www.cnblogs.com/csu_xajy/p/4314310.html