在实现的时候需要注意使装饰对象和真实对象使用相同的接口,这样可以使客户端对象在使用的时候用相同的接口来实现交互。
适用的场合:
需要扩展一个类的功能,并动态的赋予对象新的特性时。
需要动态的为对象添加新的功能,且需要动态的撤销这些功能时。
需要增加一些基本功能的排列组合产生大量功能时。
优点:
虽然直接继承同样可以实现装饰模式的功能,但是装饰模式可以提供比直接的继承方式更多的灵活性。并且可以根据不同的排列组合产生不同的结果。
缺点:
比普通的继承复杂度更高。
会产生过多的类,如果过度使用,会使项目的复杂性提高。
UML图如下:
下面是代码:
public class test { public static void main(String args[]) { Component com=new Component(); DecortorA a=new DecortorA(); DecortorB b=new DecortorB(); a.add(com); b.add(a); b.show(); System.out.println(); } } class Component { String name="com"; void show() { System.out.println(name); } } class DecortorBase extends Component { Component com; void show() { System.out.println("Decortor");
} } class DecortorA extends DecortorBase { void add(Component c) { com=c; } void show() { System.out.println("A"); com.show(); } } class DecortorB extends DecortorBase { void add(Component c) { com=c; } void show() { System.out.println("B"); com.show(); } }
运行结果如下:
联系我:renhanlinbsl@163.com
2016-7-31
19:44