/** * 抽象構件 */ public abstract class Component { public abstract void operate(); } /** * 具體構件 */ public class CreateComponent extends Component { @Override public void operate() { System.out.println("do somthing..........."); } } /** * 抽象裝飾者 */ public abstract class Decorator extends Component { private Component component=null; public Decorator(Component _component) { this.component = _component; } @Override public void operate() { this.component.operate(); } } /** *2014-10-4上午09:26:44 */ public class CreateDecorator extends Decorator { public CreateDecorator(Component _component) { super(_component); } private void method(){ System.out.println("裝飾者1。。。。。"); } public void operate() { this.method(); super.operate(); } } public class CreateDecorator2 extends Decorator { public CreateDecorator2(Component _component) { super(_component); } private void method(){ System.out.println("裝飾者2。。。。。"); } public void operate() { this.method(); super.operate(); } } /** * * *@date 2014-10-4上午09:32:08 */ public class Client { /** * 1.裝飾類和被裝飾類能夠獨立發展,不會相互耦合。 * 2.裝飾模式是一種繼承關係的替代方案 * 3.裝飾模式能夠動態的擴展一個實現類的功能。 * 裝飾模式缺點: * 多層的裝飾是比較複雜的 * 裝飾模式的應用場景: * 1.須要擴展一個類的功能,或者給一個類增長附加的功能 * 2.須要動態的給一個對象增長功能,這些功能也能夠動態的撤銷 * 3.須要爲一批兄弟類進行改裝或增長功能,首選裝飾模式 */ public static void main(String[] args) { Component component = new CreateComponent(); component = new CreateDecorator(component); component = new CreateDecorator2(component); component.operate(); } }