设计模式学习(六)装饰器模式
一、使用背景【动机】
当我们错误的使用继承来进行功能扩展时,在需求不断变更的同时可能会增加很多子类,且缺乏灵活性,那么这个时候我们可以考虑使用装饰器模式进行重构。
二、引入问题
举个栗子:我们需要做一个画图的接口
- 第一次需求已经实现了画图的基本功能,且分别拥有了两个子类实现“圆形”和“长方形”。
- 第二次需求需要加入上色的扩展功能,比如需要分别给第一次需求的两个子类都加入上色的功能。
那么我们如果直接修改原来的子类实现,显然是不合适的,颜色有很多种,那么就会加入很多不同的子类【比如“红色圆形”,“绿色长方形”,“黄色长方形”等等....】,且这也违背了我们面向对象的开闭原则。
三、代码演示
业务接口
业务实现类
装饰器【定义主线功能】
子装饰器【实现主线功能,并扩展分支功能】
模式应用
四、模式讲解
解析:动态(组合)地给一个相对稳定的主体去增加一些拓展功能。【运行时动态拓展】
目的:就拓展功能而言,使用装饰器模式比使用继承方式拓展更为灵活。(1、消除重复代码 2、有效减少子类个数)
特征:
- 继承上 :is-a关系,即我们的装饰器实现或继承了业务接口。
- 实现上 :has-a组合关系,在装饰器内部又有一个类型为业务接口类型的全局变量。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律