動態的給一個對象添加一些額外的職責,就增長功能來講,裝飾模式相比生成子類更爲靈活。java
Component: 抽象的,須要被修飾的核心類。
ConcreteComponent: 被修飾的類的具體實現。
Decorator: 抽象的,包含指向Component構件的私有變量。
ConcreteComponent: 裝飾類的具體實現。ide
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(); } }