概念
动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
实现
- 类图:
Money:
1 | package com.littlehui.design.decorator; |
Wages:
1 | package com.littlehui.design.decorator; |
Reward:
1 | package com.littlehui.design.decorator; |
Bonuses:
1 | package com.littlehui.design.decorator; |
Client:
1 | package com.littlehui.design.decorator; |
场景
Java.io包里就使用了装饰器。
BufferedInputStream及LineNumberInputStream都扩展自FilterInputStream,而FilterInputStream是一个抽象的装饰类。
总结
装饰器模式体现了设计模式里的 开放-关闭原则。
- 装饰者和被装饰者对象有相同的父类
- 可以使用一个或者多个装饰者包装一个对象。
- 在任何需要原始对象他们可以相互替换。
- 装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,以达到特定的目的。
- 对象可以在任何时候被装饰,所以可以在运行时动态,不限量地使用。