概念:为了给某个对象动态的添加某些职能,或者动态的改变某些职能。
一 适用环境
1. 在不影响其他对象和原有代码逻辑的情况下,以透明和动态的方式给对象添加上某些职能或者改变某些职能,
2. 对象的职能经常变化或者经常要动态添加职能,如果此时用继承的话要频繁改变继承体系根本不现实,所以此时用装饰者模式最好。
二 角色组成
1 被装饰者抽象接口(接口或者抽象类)
2 被装饰者具体类
3 装饰者抽象类
4 具体装饰者类
三 实例
说明:假设需要生产添加了碳酸气泡和外包装纸上写着新年快乐的哇哈哈矿泉水
1) 需要生产一瓶普通的哇哈哈矿泉水
2 )为了迎新年需要生产特殊哇哈哈作为礼品,加入碳酸气泡并使用新的外包装(写着新年快乐)
3 )生产出带有碳酸气泡和新年快乐的哇哈哈矿泉水
1 被装饰者抽象接口
2 具体被装饰者类
3 装饰者抽象类
4 具体装饰者
气泡哇哈哈矿泉水装饰者类
新年快乐哇哈哈矿泉水装饰者类
5 测试代码
测试代码输出结果:
开始装饰矿泉水-----------------
处理加工深山得来的水
水内冲入碳酸气泡
饮用水装入瓶内
用新年快乐包装纸包装
结束装饰矿泉水-----------------
四 不用继承方式实现装饰者模式的原因
拿上面例子举例,好像上面添加气泡,用新年快乐包装,通过继承就可以实现,只需要 QiPaoDecorator 继承 NormalWater, HappyNewYearDecorator 继承NormalWater 就可以办到,‘但如果在生产水的过程中,由要加入别的东西,又有新的步骤,那就麻烦了,会导致特别多的冗余继承而且代码的复用性极差,所以用上述例子所用的,装饰者模式能很好的解决这个问题。