???? 装饰模式-Decorator
https://github.com/mumushuiding/golang-design-pattern/tree/master/03_Decorator
❓ 问题
???? 装饰模式应该可以在运行时 动态 地给一个已有的对象 添加 功能 (类似装饰圣诞树)
✔️ 解决方法
????通过装饰类 聚集 需要装饰和扩展的对象.
????同时提供给顾客或客户与 装饰 相同的接口.
⚡️类图
????参与者
装饰模式的参与者:
???? IAuto (组件接口).IAuto 基类,基类的对象希望扩展自己的功能,但是自身不做任何修改.
???? Decorator (装饰类). 装饰 类是基类IAuto的派生类, 类 Decorator 聚集 了类 IAuto 接口,通过这个对象可以调用 IAuto 类的子类.装饰类 覆写 所有继承的方法,把调用委托给聚集的对象.
???? Car1/汽车1 (具体实现组件1).是类 IAuto 的子类.
❄️ AirConditioner/空调 (具体实现装饰类1).是Decorator的实现
????评价
????优点
装饰模式具有下列优点:
组件并不识别装饰类
➕ 可以动态地 扩展 功能
???? 装饰模式可以把一个 继承 的层次关系结构中的多个类同时通过一个装饰类进行扩展.
???? 装饰类可以自由 组合.
????缺点
装饰模式存在下列缺点:
???? 装饰类的主要部分是代理方法,但是代理可导致 延时.
❌ 很难找到装饰类的组合应用中发生的 错误.
有疑问加站长微信联系(非本文作者)