装饰者设计模式总结

现有问题: 如何动态的增加功能,即对原有功能进行增强。
方案1: 利用Java的继承方式来实现,但若继承层次过深或者增加功能过多,会导致继承爆炸,扩展性低,后续也很难维护,本质上属于继承方式
方案2: 组合优于继承的思想,使用组合来进行增强。底层就是委托技术

特点:

  1. 装饰器类和原始类实现相同的接口,或继承相同的父类,这样可以实现所谓的套娃功能
  2. 对原始功能的增强。代理设计模式是对与原始类无关的功能进行增强,而装饰器是对跟原始类相关的功能进行的增强。

与代理模式的区别:

  1. Proxy模式体现的封装性,隐藏细节;Decorator模式体现的是动态性,显式的增加功能;
  2. Proxy只能增加一种功能;Decorator可以动态的进行多重功能的叠加,扩展性好;
  3. 设计者是否感知。若设计者需要感知,则使用Decorator模式,否则使用Proxy模式
  4. Proxy增加的是原始类无关的功能; Decorator增加的是与原始类相关的功能。

优点:

  1. 动态组合功能。根据不同的条件,在运行期可以动态组合不同的功能;
  2. 功能复用 。每个装饰器负责一个功能,满足单一职责,同时也方便功能的复用。
    缺点: 会产生很多的细粒度对象。

开源框架中的应用:

  1. JDK的IO流设计
  2. Mybatis中的Cache设计
相关推荐
李广坤12 小时前
设计模式的本质:隔离变化
后端·设计模式
cuber膜拜15 小时前
Tenacity 原理与基本使用
服务器·网络·python·装饰器模式·tenacity
河码匠15 小时前
设计模式之依赖注入(Dependency Injection)
java·设计模式·log4j
小湘西17 小时前
互联网黑话持续更新
其他·设计模式
a35354138218 小时前
设计模式——访问者模式
设计模式·访问者模式
Eloudy18 小时前
动态库中不透明数据结构的设计要点总结
数据结构·设计模式
mCell1 天前
为什么 Memo Code 先做 CLI:以及终端输入框到底有多难搞
前端·设计模式·agent
阿里巴巴淘系技术团队官网博客1 天前
设计模式Trustworthy Generation:提升RAG信赖度
人工智能·设计模式
Loo国昌2 天前
SmartArchitect:AI 驱动的设计平台,让想法秒变流程图
人工智能·后端·设计模式·流程图
为美好的生活献上中指2 天前
java每日精进 02.10【震惊!数据库树形结构设计5大黑科技:从菜鸟到大神,一文让你性能飙升100倍!】
java·开发语言·设计模式