在实现的时候需要注意使装饰对象和真实对象使用相同的接口,这样可以使客户端对象在使用的时候用相同的接口来实现交互。
适用的场合:
需要扩展一个类的功能,并动态的赋予对象新的特性时。
需要动态的为对象添加新的功能,且需要动态的撤销这些功能时。
需要增加一些基本功能的排列组合产生大量功能时。
优点:
虽然直接继承同样可以实现装饰模式的功能,但是装饰模式可以提供比直接的继承方式更多的灵活性。并且可以根据不同的排列组合产生不同的结果。
缺点:
比普通的继承复杂度更高。
会产生过多的类,如果过度使用,会使项目的复杂性提高。
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