装饰器模式属于结构型模式,允许向一个现有的类添加新功能,同时又不改变其结构,只是作为现有的类的一个包装。
意图:动态给一个类添加额外功能。就增加功能来说,装饰器模式相比生成子类更为灵活。
主要解决:一般扩展一个类经常使用继承方式实现,随着扩展功能的增多,子类会很膨胀。
何时使用:不想增加子类的情况下扩展类,可代替继承。Java输入输出流是典型的装饰器模式
interface Action{
void action();
}
class Person implements Action{
@Override
public void action() {
System.out.println("smile........");
}
}
class Dog implements Action{
@Override
public void action() {
System.out.println("shout........");
}
}
//抽象装饰器
abstract class Wrapper implements Action{
Action action;
public Wrapper(Action action) {
this.action = action;
}
@Override
public void action() {
action.action();
}
}
//实体装饰器
class SleepWrapper extends Wrapper{
public SleepWrapper(Acti