使用情景:类的功能扩展
设计原则:类营改对扩展开放,对修改关闭
体现案例一:
观察者模式,通过添加新的观察者,通知观察者来扩展功能
装饰者模式简单类图简单说明:
装饰者模式动态的将责任添加到对象上,若要扩展功能,装饰者提供了比继承更有弹性替代方案。
总共分为四部分:
1.被修饰类基本模型(接口或者抽象类)
2.被修饰类子类(具体组件)
3.修饰类基本模型(抽象类)
4.修饰类子类(具体修饰类)
简单说明:
1.装饰者与被装饰者必须实现相同的接口以保持类型一致,我们利用继承来达到"类型匹配",而不是获取行为(扩展功能)
2.使用对象组合,让被修饰类(饮料)与修饰类(调料)弹性地加以混合与匹配(扩展功能)--依赖继承,那么类的行为只能在编译时决定,使用组合保证了在运行时决定。
3.被修饰类基本模型可以是接口或者抽象类,灵活变通
具体实现:
CondimentDecorator.java修饰抽象类(调料)
被修饰类具体实现(饮料)
修饰类具体实现(调料)
运行时完成功能扩展
具体案例:java/IO ->功能过程只需添加抽象装饰类FileInputStream子类,组合使用即可
IO结构图
装饰者模式优缺点:
1.弹性注入,方便功能扩展
2.设计时加入大量小类,不利了解设计方式
3.类型问题,代码依赖特殊类型,导入可能出错
4.实例化组件时,增加代码复杂度,往往要结合工厂模式和生成器模式使用
网友评论