代码
package cn.test;
public class Test {
public static void main(String[] args) {
OldPerson oldPerson = new OldPerson(new YoungPerson());
oldPerson.eat();
}
}
class YoungPerson{
public void eat(){
System.out.println("吃饭");
}
}
class OldPerson{
private YoungPerson youngPerson;
public OldPerson(YoungPerson youngPerson) {
this.youngPerson = youngPerson;
}
public void eat(){
System.out.println("饭钱来跟烟");
this.youngPerson.eat();
System.out.println("饭后来点甜品");
}
}
总结
- 当需要给一个现有类添加附加职责,而又不能采用生成子类的方法进行扩充时例如该类被隐藏,或者该类是终极类,或者采用继承方式会产生大量的子类.
- 当需要通过对现有的一组基本功能进行排列组合而产生非常多的功能时,采用继承关系很难实现,而采用装饰模式却很好实现.
- 当对象的功能要求可以动态地添加,也可以再动态地撤销时.
上述的情况都可以用装饰模式.