设计模式之--装饰者模式
来源:互联网 发布:java判断全角字符 编辑:程序博客网 时间:2024/06/05 06:02
源码地址:https://github.com/Afengzi/design-pattern/tree/master/src/main/java/com/afengzi/design/decorative
以下讲解及UML类图都是基于上面的例子进行
除了继承之外,还有一种在不改变代码的前提下扩展功能和行为,而且是在运行时动态的附加,就是装饰者模式。
什么是装饰者模式呢?
动态的给对象附加责任和行为,是一种比继承更弹性的设计方案。
装饰者和被装饰者必须是同一种类型,通常是继承同一个抽象类。装饰者也可以作为一个组件,继续被另一个装饰者包装。
装饰者、被装饰者对象都可以被client访问,并且是合法的。因为装饰者同时可能是一个被包装的对象。
装饰者动态的把行为附加给被包装对象,通常是通过委托|组合实现,设计方案更弹性。另外当被包装的类改变时,提供一个新的实现了相同接口的实现类即可,这也是另一个设计原则:OCP(开放-封闭)原则,对扩展功能开放,同时又对修改内部代码封闭。
装饰者和被装饰者必须是同一个类型,利用继承来达到‘类型匹配’,利用委托|组合其他装饰者或者基础组件来动态的附加行为、责任。
在装饰者模式中,难点是如何选择组件(被装饰者)和装饰者。装饰者也可以被另一个装饰者所装饰,如源码中的Mocha,本身可以装饰组件HouseBlend,但是也可以被Milk装饰。所以装饰者和被装饰者必须是同一个类型。
UML类图:
0 0
- 设计模式之装饰者设计模式
- 设计模式 之 装饰者
- 设计模式之装饰者模式
- 设计模式之装饰者模式
- 设计模式之Decorator(装饰者模式)
- 设计模式之五---装饰者模式
- 设计模式之---装饰者模式
- c++设计模式之装饰者模式
- Php设计模式之装饰者模式
- java设计模式之装饰者模式
- 设计模式之装饰者模式
- 【设计模式】之装饰者模式
- HeadFirst设计模式之装饰者模式
- c++设计模式之装饰者模式
- 设计模式之装饰者模式
- 设计模式之--装饰者模式
- 设计模式之装饰者模式
- 设计模式之装饰者模式
- leetcode之Longest Consecutive Sequence
- Linux seq 命令
- HDU 5536 Chip Factory (暴力 或者 01Trie)
- python中format的实例
- 去除 JavaScript 代码的怪味
- 设计模式之--装饰者模式
- HDU 5534 Partial Tree (2015长春站H题&&完全背包)
- OC03 避免互相引入 方法理解5
- Maven多模块布局实例详解
- 关于手机端手势js库的选择:hammer.js
- 151102笔记
- IP地址 网段的划分
- cocos-js 的事件监听(学习)
- BFS Codeforces591E Three States