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

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

装饰模式

1. 什么是装饰模式

在不必改变原类文件和使用继承的情况下,动态地扩展一个对

象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

2. 何时适合使用装饰模式?

  1. 需要扩展一个类的功能,或给一个类添加附加职责。
  2. 需要动态的给一个对象添加功能,这些功能可以再动态的撤销。
  3. 需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实。
  4. 当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。

3.装饰模式UML图

装饰模式UML图

4.个人总结

装饰模式实现的原理在于Decorator类可以包含一个Component组件,使得修饰器本身和另一个组件组合起来(这就是为什么Decorator要组合Compoent),同时产生的新组件也需要是一个Component组件才能使得这个组合能够被其他组件组合(这就是为什么Decorator要继承Compoent)。每个Decorator都需要一个Component组件来修饰(你不能没有任何对象就来组合/修饰吧,就像玩乐高积木一样,你要本来就有一块积木,才用另一块积木来组合/修饰它),所以这里又有一个核心组件ConcreteComponent提供一个第一个而且是核心的具体组件,没有核心组件是无法使用Decorator修饰器来合成/修饰生成新的组件。

这里有一个博文写的很好很详细,参考一下:

链接:
作者: 果冻想

转载地址:http://knyii.baihongyu.com/

你可能感兴趣的文章
[转]javascript with延伸的作用域是只读的吗?
查看>>
php的autoload与global
查看>>
IE不支持option的display:none属性
查看>>
[分享]mysql内置用于字符串型ip地址和整数型ip地址转换函数
查看>>
[转]开源中最好的Web开发的资源
查看>>
Https加密及攻防
查看>>
Java生成随机不重复推广码邀请码
查看>>
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
String类的intern方法随笔
查看>>
【泛型】一个简易的对象间转换的工具类(DO转VO)
查看>>
1.随机函数,计算机运行的基石
查看>>
MouseEvent的e.stageX是Number型,可见as3作者的考虑
查看>>
移植Vim配色方案到Eclipse
查看>>
从超链接调用ActionScript
查看>>
谈谈加密和混淆吧[转]
查看>>
TCP的几个状态对于我们分析所起的作用SYN, FIN, ACK, PSH,
查看>>
网络游戏客户端的日志输出
查看>>
关于按钮的mouseOver和rollOver
查看>>
Netty框架
查看>>