设计模式 - 装饰者模式

一、定义

1.      装饰者模式(Decorator Pattern)是GoF提出的23种设计模式中的一种,属于结构模式。

2.      装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

3.      可以使多个继承同一接口的子类进行组合或合并,而不需要创建新的子类。

二、基本角色

1.      接口:原生类和装饰类都实现了同一个接口(如下图的IThirdParty)

2.      原生类:原生类是不必或不能更改代码的类(如下图的ThirdParty)

3.      装饰类:用于扩展原生类的一个新类(如下图的Decorator1)。装饰类的内部持有原生类的一个对象(通常使用构造函数传入),当需要对原生类的某个方法进行扩展时,就可以在调用内部原生类对象的原有方法时,增加扩展的代码。

装饰者模式的基本关系如下图。

三、通俗例子

我们平常使用的手机贴膜,可以看作是一个装饰者模式的例子。

当我们需要为手机增加屏幕保护功能时,我们并不需要拆开手机来改变手机屏幕的构造,而只需要把膜贴在手机上即可。这里手机屏幕就是原生类贴膜就是装饰类,而手机屏幕和贴膜都可以进行的触摸操作就是接口

我们手指在贴膜上的任何操作,都可以同样作用在手机屏幕上。(保持原有功能)

而因为频繁操作而划伤贴膜的行为,却并不会影响手机屏幕。(扩展了保护功能)

四、简单例子

1.      根据装饰者模式所要求的基本角色,我们可以建立一个最简单的例子,如下图所示的JAVA类

2.      这里假设接口和原生类是由第三方提供的,我们无法进行修改。接口定义了sayMsg方法,原生类则实现该方法。

3.      新建两个装饰类,通过构造函数传入原生对象内部持有。对需要扩展的sayMsg方法,进行扩展修改。

4.      使用。

五、适用性

1.      需要扩展一个类的功能,或给一个类增加附加责任。

2.      需要动态地给一个对象增加功能,这些功能可以再动态地撤销。

3.      需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值