装饰者设计模式总结

现有问题: 如何动态的增加功能,即对原有功能进行增强。
方案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设计
相关推荐
geovindu5 小时前
rust: Chain of Responsibility Pattern
开发语言·后端·设计模式·rust·责任链模式·行为模式
拆房老料6 小时前
【第四部分:Agentic 智能体设计模式】15.为什么 Agent 也需要设计模式
人工智能·设计模式·ai·ai-native
geovindu7 小时前
rust: Chain of Responsibility Pattern (续)
开发语言·后端·设计模式·rust·责任链模式·行为模式
Lost of 程序猿8 小时前
责任链模式实战:审批流里“层层把关“的艺术
后端·设计模式·asp.net·责任链模式
希洛兔1 天前
状态模式详解:让对象随内部状态自动改变行为
java·设计模式·状态模式
博风1 天前
7、设计模式应用举例:策略模式:加密、解密文件
设计模式·策略模式
4SAPI1 天前
Provider Adapter设计模式:如何让AI应用支持多个模型
网络·人工智能·设计模式
geovindu1 天前
rust: pool Pattern
开发语言·后端·设计模式·rust·对象池简写模式
高晶1 天前
ARM 嵌入式 Linux 开发:从体系结构到 LED 点亮实战
设计模式·程序员
VimorphTech1 天前
接入两套 TTS 接口后,业务代码如何避免堆满 if/else?
设计模式