前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >装饰模式(单一责任)

装饰模式(单一责任)

作者头像
比特大冒险
发布2023-12-27 08:55:08
800
发布2023-12-27 08:55:08
举报
文章被收录于专栏:小白历险记小白历险记

Decorator(装饰模式:单一责任模式)

链接:装饰模式实例代码 + 解析

目的

  • 在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性; 并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。
  • 如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题?从而使得任何“功能扩展变化”所导致的影响将为最低?

模式定义

动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码 & 减少子类个数)。 ——《设计模式》GoF

要点总结

  • 通过采用组合而非继承的手法, Decorator模式实现了在运行时动态扩展对象功能的能力,而且可以根据需要扩展多个功能。 避免了使用继承带来的“灵活性差”和“多子类衍生问题”。
  • Decorator类在接口上表现为is-a Component的继承关系,即Decorator类继承了Component类所具有的接口。 但在实现上又表现为has-a Component的组合关系,即Decorator类又使用了另外一个Component类。
  • Decorator模式的目的并非解决“多子类衍生的多继承”问题,Decorator模式应用的要点在于解决“主体类在多个方向上的扩展功能”——是为“装饰”的含义。

Ps. 装饰模式的使用更像是将统一模块中,不同的子功能一个一个单独独立出来,再根据实际环境中所需的单独子模块手动的去一层一层的套成一个套娃。(详情见代码:在底层逻辑上的做法,一般是将上一层的套娃使用继承,下一层的套娃使用组合(为了泛型,一般子模块为多态子类,且父类有统一的接口约束)也由于该做法的原因若是在代码中发现继承和组合是同一个类,大概率这就是装饰模式)

在运行时形成该模式的目的(需要使用者自行组合子模块,之后由多态 + 组合完成),而不是像大多数的设计模式在编译时。

Eg.

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Decorator(装饰模式:单一责任模式)
    • 目的
      • 模式定义
        • 要点总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档