装饰者设计模式总结

现有问题: 如何动态的增加功能,即对原有功能进行增强。
方案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设计
相关推荐
alibli2 小时前
一文学会设计模式之创建型模式及最佳实现
c++·设计模式
1024肥宅3 小时前
前端常用模式:提升代码质量的四大核心模式
前端·javascript·设计模式
郝学胜-神的一滴8 小时前
设计模式依赖于多态特性
java·开发语言·c++·python·程序人生·设计模式·软件工程
帅次8 小时前
系统分析师:软件需求工程的软件需求概述、需求获取、需求分析
设计模式·重构·软件工程·团队开发·软件构建·需求分析·规格说明书
EXtreme358 小时前
【数据结构】算法艺术:如何用两个栈(LIFO)优雅地模拟队列(FIFO)?
c语言·数据结构·算法·设计模式·栈与队列·摊还分析·算法艺术
1024肥宅1 天前
JavaScript常用设计模式完整指南
前端·javascript·设计模式
特立独行的猫a1 天前
C++观察者模式设计及实现:玩转设计模式的发布-订阅机制
c++·观察者模式·设计模式
better_liang1 天前
每日Java面试场景题知识点之-单例模式
java·单例模式·设计模式·面试·企业级开发
sg_knight1 天前
什么是设计模式?为什么 Python 也需要设计模式
开发语言·python·设计模式
koping_wu1 天前
【设计模式】设计模式原则、单例模式、工厂模式、模板模式、策略模式
单例模式·设计模式·策略模式