博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java二十三设计模式之------装饰模式
阅读量:6910 次
发布时间:2019-06-27

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

一、装饰模式(Decorator)

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

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

 
  1. public interface Sourceable {  
  2.     public void method();  
  3. }  
 
  1. public class Source implements Sourceable {  
  2.   
  3.     @Override  
  4.     public void method() {  
  5.         System.out.println("the original method!");  
  6.     }  
  7. }  
 
  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. }  

测试类:

 
  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/maowang1991/archive/2013/04/15/3023236.html

转载于:https://www.cnblogs.com/wuxinyiwu/p/8116404.html

你可能感兴趣的文章
使用new操作符来调用一个构造函数的时候发生了什么
查看>>
element-ui之el-scrollbar源码解析学习
查看>>
ceph 的pg诊断
查看>>
交换机配置vlan 访问控制列表
查看>>
我的友情链接
查看>>
12个时间管理妙招
查看>>
Python面向对象之类的成员
查看>>
Win8上iis配置
查看>>
Confluence 6 配置 Office 转换器
查看>>
IT从业人员关注哪些问题
查看>>
Windows 2012 Hyper –V 3.0 New Functions
查看>>
maven部分插件配置demo
查看>>
Grin交易原理详解
查看>>
大数据体系【概念认知】系列-2:存储以及副本策略
查看>>
我的友情链接
查看>>
linux企业常用服务---haproxy+nginx搭建web高可用集群
查看>>
win7 断开 共享连接的操作方法
查看>>
CTSSD服务无法正常启动:Failure 4 in trying to open SV key PROCL-4/PROCL-5 clsctss_r_av2
查看>>
再议OPEN CURSOR与BULK COLLECT
查看>>
我的友情链接
查看>>