装饰器模式
定义
动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更加灵活。

实现
Component
Component 是一个接口或者抽象类,定义需要被装饰的原始类。
1 2 3
| public abstract class Component{ public abstract void operate(); }
|
Concrete Component
Component 的实现类。
1 2 3 4 5 6 7 8
| public class ConcreteComponent extends Component{
@Override public void operate(){ }
}
|
Decorator
抽象类,用于实现接口或者抽象方法。包含被修饰的Componnet属性。
1 2 3 4 5 6 7 8 9 10 11 12 13
| public abstract class Decorator extends Component{ private Component component = null;
public Decorator(Component c){ this.component = c; } @Override public void operate(){ this.component.operate(); }
}
|
Concrete Decorator
具体装饰角色
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| public class ConcreteDecorator1 extends Decorator{ public ConcreteDecorator1(Component component){ super(component); } private void method1(){ } public void operate(){ this.method1(); super.operate(); } }
public class ConcreteDecorator2 extends Decorator{ public ConcreteDecorator2(Component component){ super(component); } private void method2(){ } public void operate(){ super.operate(); this.method2(); } }
|
Use
1 2 3 4
| Component c = new ConcreteComponent(); c = new ConcreteDecorator1(c); c = new ConcreteDecorator2(c); c.operate();
|
应用
优点
装饰类和被装饰类可以独立发展,而不会相互耦合。
装饰模式是继承关系的一个替代方案。
装饰模式可以动态地扩展一个实现类的功能。
缺点
当装饰多层时导致系统复杂度高。