java设计模式(十三)---装饰者模式
一、装饰者模式定义:
动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
二、装饰者模式涉及的角色:
1.抽象组件:
定义一个抽象接口,来规范准备附加功能的类。
2.具体抽象组件:
将要被附加功能的类,实现抽象组件角色的接口
3.抽象装饰者:
持有具体组件角色的引用,并定义与抽象组件角色一致的接口。
4.具体装饰:
实现抽象装饰者角色,负责对具体组件添加额外的功能。
三、装饰者模式适用的场景:
1.在不影响其他对象的情况下,以动态透明的方式给单个对象添加职责(方法)
2.处理那些可以撤销的职责
四、装饰者模式的优缺点:
优点:
1.装饰者可以在被装饰者的行为前面或者后面加上自己的行为,甚至将呗装饰者的行为整个取代掉,达到特定的目的。
2.装饰者一般对组件的客户是透明的,除非客户程序依赖于组件的具体类型
缺点:
1.装饰者会导致设计中出现许多小对象,如果过度使用,会让程序变得很复杂。
五、装饰者模式的实现:
装饰者的功能主要就是在不改变被装饰者的前提下,动态的添加新的职责,假设给一辆宝马加行车记录仪,前提是不能动宝马的原有设计,肯定不能返厂让生产车的工厂添加,那样就会太复杂,只能通过组合,来让宝马车拥有行车记录的功能。
1.抽象组件:
2.组件具体实现:
3.装饰者抽象:
4.具体装饰者实现:
5.使用: