装饰器模式
2018-06-18 01:06:54来源:未知 阅读 ()
装饰器模式,顾名思义,拘束将某个类重新装扮一下,使得它比原来更“漂亮”, 或者在功能上更强大,这就是装饰器模式所要达到的目的。但是作为原来的这个类的使用者,还不应该感受到装饰前和装饰后又什么不同,否则就破坏了原有类的结构了。
装饰器模式有如下结构:
? Component:抽象组件,定义了一组抽象的接口,规定这个被装饰类有哪些功能。
? ConcreteComponent: 实现这个抽象组件的所有功能。
? Decorator:装饰器角色, 它持有一个Component 对象实例的引用。
? ConcreteDecorator:具体的装饰器实现者,负责实现装饰器角色定义的功能。
好了,下面直接上代码:
1、先定义一个抽象组件 Component:
package com.hd.decorator; public interface Component { void Operation(); }
2、再实现这个抽象组件的功能
package com.hd.decorator; public class ConcreteComponent implements Component { @Override public void Operation() { System.out.println("具体抽象组件的功能"); } }
3、定义一个装饰器类
package com.hd.decorator; public class Decorator implements Component { protected Component component; public void setComponent(Component component){ this.component = component; } @Override public void Operation() { if(component != null){ component.Operation(); } } }
4、再定义装饰器的实现者:
package com.hd.decorator; public class ConcreteDecoratorA extends Decorator { @Override public void Operation() { System.out.println("加上装饰功能A..."); super.Operation(); } }
package com.hd.decorator; public class ConcreteDecoratorB extends Decorator { @Override public void Operation() { System.out.println("加上装饰功能B..."); super.Operation(); } }
5、下面测试一下:
package com.hd.decorator; public class TestDecorator { public static void main(String[] args) { Component c = new ConcreteComponent(); ConcreteDecoratorA d1 = new ConcreteDecoratorA(); ConcreteDecoratorB d2 = new ConcreteDecoratorB(); d1.setComponent(c); d2.setComponent(d1); d2.Operation(); } }
结果如下:
加上装饰功能B...
加上装饰功能A...
具体抽象组件的功能
装饰器和适配器模式,他们看似都是起到包装一个类或者对象的作用,但是使用他们的目的很不一样。
适配器模式的意思是要将一个接口转变成另一个接口,它的目的是通过改变接口来达到重复使用的目的; 而装饰器模式不是要改变被装饰对象的接口,而是恰恰要保持原有的接口,但是增强原有对象的功能,或者改变原有对象的处理方法而提升性能。所以这两个模式设计的目的是不同的。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 设计模式-委派/策略模式 2020-06-09
- 深入理解:设计模式中的七大设计原则 2020-06-07
- 设计模式---类之间的关系知多少 2020-06-07
- 你与面试官所了解的单例模式并不一样! 2020-06-06
- 高手眼中的观察者模式有什么不一样 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash