装饰器模式

1
2
3
4
5
6
publlic static void main(String[] args){
Component c = new ConcreteComponent1();
ConcreteDecorator decorator = new ConcreteDecorator();
decorator.setComponent(c);
decorator.operation();
}

介绍

意图:动态的给实体类添加新功能

常用实现方式:

  • 继承:每添加一个共能,都要添加/修改子类。==导致耦合性强,子类膨胀==。
  • 装饰器:显式调用,==动态==的为实体添加功能。子类与装饰类可以独立拓展。==导致耦合性低,子类独立发展,装饰类可复用==。
  • 代理:隐藏了真实调用对象,使用者无感知。

缺点: 多层装饰比较复杂。即,将传入过实体类的装饰器,再传入装饰器。

多层装饰[^添加多个功能]

多个装饰器,定义不同的功能。

  1. 将实体传入装饰器,获得返回结果
  2. 将返回结果再次传入一个装饰器
  3. 得到一个额外添加了两个功能的实体