博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
装饰模式
阅读量:4461 次
发布时间:2019-06-08

本文共 991 字,大约阅读时间需要 3 分钟。

 

顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下:

Source类是被装饰类,Decorator类是一个装饰类,可以为Source类动态的添加一些功能,代码如下:

[java] 

  1. public interface Sourceable {  
  2.     public void method();  
  3. }  

[java] 

  1. public class Source implements Sourceable {  
  2.   
  3.     @Override  
  4.     public void method() {  
  5.         System.out.println("the original method!");  
  6.     }  
  7. }  

[java] 

  1. public class Decorator implements Sourceable {  
  2.   
  3.     private Sourceable source;  
  4.       
  5.     public Decorator(Sourceable source){  
  6.         super();  
  7.         this.source = source;  
  8.     }  
  9.     @Override  
  10.     public void method() {  
  11.         System.out.println("before decorator!");  
  12.         source.method();  
  13.         System.out.println("after decorator!");  
  14.     }  
  15. }  

测试类:

[java] 

  1. public class DecoratorTest {  
  2.   
  3.     public static void main(String[] args) {  
  4.         Sourceable source = new Source();  
  5.         Sourceable obj = new Decorator(source);  
  6.         obj.method();  
  7.     }  
  8. }  

输出:

before decorator!

the original method!

after decorator!

装饰器模式的应用场景:

1、需要扩展一个类的功能。

2、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)

缺点:产生过多相似的对象,不易排错!

转载于:https://www.cnblogs.com/domi22/p/8053857.html

你可能感兴趣的文章
Cacti完全使用手册 ( 让你快速个性化使用Cacti )
查看>>
Jmeter使用_StringFromFile函数需要添加编码方式
查看>>
20180418开发日志
查看>>
PCB SVN 服务端VisualSVN Server与TortoiseSVN
查看>>
mybatis动态SQL中的set标签的使用
查看>>
MySQL 5.6 & 5.7最优配置模板
查看>>
Java虚拟机各内存区域的位置及功能的介绍
查看>>
Android 中判断网络状态
查看>>
netty3升netty4一失眼成千古恨
查看>>
HTML设置表格
查看>>
C# winfrom提示框,点击则不显示,不点击则提示输入内容
查看>>
修改、更新、删除mysql
查看>>
Nginx初识
查看>>
201771010113 李婷华 《面向对象程序设计(java)》第七周学习总结
查看>>
A+B
查看>>
把昨晚写的东西完善了一下,还行,真差不多
查看>>
ida 符号路径设置
查看>>
未来网页设计的趋势——响应式设计图标
查看>>
React Native npm第三方报错
查看>>
微信jssdk在iframe页面失效问题的解决措施
查看>>