???? 装饰模式-Decorator

mumushuiding · · 946 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

???? 装饰模式-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的实现

????评价

????优点

装饰模式具有下列优点:

组件并不识别装饰类

➕ 可以动态地 扩展 功能

???? 装饰模式可以把一个 继承 的层次关系结构中的多个类同时通过一个装饰类进行扩展.

???? 装饰类可以自由 组合.

????缺点

装饰模式存在下列缺点:

???? 装饰类的主要部分是代理方法,但是代理可导致 延时.

❌ 很难找到装饰类的组合应用中发生的 错误.


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:mumushuiding

查看原文:???? 装饰模式-Decorator

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

946 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传