码迷,mamicode.com
首页 > 其他好文 > 详细

装饰设计模式

时间:2016-07-31 20:30:51      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

装饰设计模式:Decorator Pattern,又称装饰者模式。特点是可以在不改变这个类的情况下,动态的为其添加新的功能,在运行时动态对对象进行扩展。主要实现方式是通过将其包装成另一个对象并添加新的功能来实现动态的添加功能。也就是说,是通过另一个类来将本来的对象包裹其中。

在实现的时候需要注意使装饰对象和真实对象使用相同的接口,这样可以使客户端对象在使用的时候用相同的接口来实现交互。

适用的场合:

需要扩展一个类的功能,并动态的赋予对象新的特性时。

需要动态的为对象添加新的功能,且需要动态的撤销这些功能时。

需要增加一些基本功能的排列组合产生大量功能时。

优点:

虽然直接继承同样可以实现装饰模式的功能,但是装饰模式可以提供比直接的继承方式更多的灵活性。并且可以根据不同的排列组合产生不同的结果。

缺点:

比普通的继承复杂度更高。

会产生过多的类,如果过度使用,会使项目的复杂性提高。

UML图如下:

技术分享

下面是代码:

public class test

{

public static void main(String args[])

{

Component com=new Component("sam");

DecortorA a=new DecortorA();

DecortorB b=new DecortorB();

a.add(com);

b.add(com);

a.show();

System.out.println();

b.show();

}

}

class Component

{

String name;

Component(String name)

{

this.name=name;

}

void show()

{

System.out.println(name);

}

}

class DecortorBase

{

Component com;

void show()

{

System.out.println("Decortor");

com.show();

}

}

class DecortorA extends DecortorBase

{

void add(Component c)

{

com=c;

}

void show()

{

System.out.println("A");

super.show();

}

}

class DecortorB extends DecortorBase

{

void add(Component c)

{

com=c;

}

void show()

{

System.out.println("B");

super.show();

}

}

运行结果如下:

技术分享

联系我:renhanlinbsl@163.com

2016-7-31

19:44

装饰设计模式

标签:

原文地址:http://www.cnblogs.com/ives/p/decortor_pattern.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!