装饰模式
动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生成子类更为灵活。
- 通常是继承关系的替代方案。
- 常用于动态的增加对象的功能。
通用类图
组件含义
Component: 抽象的,需要被修饰的核心类。
ConcreteComponent: 被修饰的类的具体实现。
Decorator: 抽象的,包含指向Component构件的私有变量。
ConcreteComponent: 装饰类的具体实现。
demo
abstract class Component { public abstract void operate(); } class ConcreateComponent extends Component { @Override public void operate() { System.out.println("do something"); } } abstract class Decorator extends Component { private Component component = null; public Decorator(Component component) { this.component = component; } @Override public void operate() { this.component.operate(); } } class ConcreteDecorator1 extends Decorator { public ConcreteDecorator1(Component component) { super(component); } private void method1() { System.out.println("method 1 decorate"); } public void operate() { this.method1(); super.operate(); } } class ConcreteDecorator2 extends Decorator { public ConcreteDecorator2(Component component) { super(component); } private void method2() { System.out.println("method 2 decorate"); } public void operate() { this.method2(); super.operate(); } } public class Client { public static void main(String[] args) { Component component = new ConcreateComponent(); component = new ConcreteDecorator1(component); component = new ConcreteDecorator2(component); component.operate(); } }