- 动态地为一个对象增加一个新的功能或职责时,可以考虑使用装饰者模式;
- 动态的为一个对象的职责增加新的职责,避免为了适应这样的变化而增加继承子类扩展的方式,可以使用装饰者模式。
- 原有对象不发生变化(使用原有的对象,重新构建出一个新的对象)
看下图:
装饰者模式就是这样,对已有的对象进行装饰,比如java io 中的类。
装饰者模式的基本用法很简单:
public class MaopiFang {
void biyu(){
System.out.println("避雨");
}
}
public class PutongFang {
private MaopiFang mMaopiFang;
public PutongFang(MaopiFang maopiFang) {
this.mMaopiFang = maopiFang;
}
void shengHuo() {
mMaopiFang.biyu();
System.out.println("生活");
}
}
public class HaohuaFang {
private PutongFang putongFang;
public HaohuaFang(PutongFang putongFang) {
this.putongFang = putongFang;
}
public void protect() {
putongFang.shengHuo();
System.out.println("我有安保系统");
}
}
这只是装饰者设计模式最简单的用例,在装饰对象中我们可以对传入的对象作出相应的处理,以达到扩充职责的能力。