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

实现
Component
Component 是一个接口或者抽象类,定义需要被装饰的原始类。
| 12
 3
 
 | public abstract class Component{public abstract void operate();
 }
 
 | 
Concrete Component
Component 的实现类。
| 12
 3
 4
 5
 6
 7
 8
 
 | public class ConcreteComponent extends Component{
 @Override
 public void operate(){
 
 }
 
 }
 
 | 
Decorator
抽象类,用于实现接口或者抽象方法。包含被修饰的Componnet属性。
| 12
 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
具体装饰角色
| 12
 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
| 12
 3
 4
 
 | Component c = new ConcreteComponent();c = new ConcreteDecorator1(c);
 c = new ConcreteDecorator2(c);
 c.operate();
 
 | 
应用
优点
装饰类和被装饰类可以独立发展,而不会相互耦合。
装饰模式是继承关系的一个替代方案。
装饰模式可以动态地扩展一个实现类的功能。
缺点
当装饰多层时导致系统复杂度高。