首页/新闻资讯/正文详情

【设计模式】继承的替代方式:装饰者模式-动态丰富对象功能,而不是实现大量的继承实例

发布时间:2026/11/3 9:09:53 来源:云帆数科 栏目:资讯中心
【设计模式】继承的替代方式:装饰者模式-动态丰富对象功能,而不是实现大量的继承实例
了解一些使用案例并写一些例子对装饰者模式有一个入门。1. 装饰者模式装饰者模式是继承关系的一个替代方案它可以动态地将功能附加到对象上提供了比继承更有弹性的替代方案。适用场景需要增加由一些基本功能的排列组合而产生的非常大量的功能从而使继承关系变的不现实这时需要装饰者模式。装饰者模式的作用可以动态地给一个对象添加一些额外的职责可以增加一些基础功能而组合大量的功能这是继承实现不了的。2. 使用案例2.1. java的IO流其中buffer附加了缓冲区的功能、InputStream附加了编码方式而实际读取文件的还是FileInputStream前两者只是增强或是丰富了功能。2.2. spark的RDD算子实际触发执行的是collect算子。与javaIO不同的是RDD可自定义每个算子的处理逻辑即控制抽象。而java IO如上是直接拿来用的。控制抽象将封装的逻辑打包发给它它便具有了此功能。3. 实现装饰者3.1. 需求描述3.2. 逻辑描述drink是咖啡种类抽象类具体的咖啡种类可以通过继承实现decorator是装饰的逻辑定义了具体那种咖啡和口味是如何组合的逻辑并且根据不同的口味继承实现不同的组合逻辑通过以组合的方式可以动态实现不同口味的各种咖啡咖啡的抽象与实现publicabstractclassDrink{publicStringdes;//要添加的口味privatefloatprice0.0f;//... set and get: des and price//计算费用的抽象方法//子类来实现publicabstractfloatcost();}publicclassDeCafextendsDrink{publicDeCaf(){setDes( 无因咖啡 );setPrice(1.0f);}}口味的实现与抽象//装饰者: 组装口味和Drink的逻辑//通过继承drink使得装饰者也有drink的属性publicclassDecoratorextendsDrink{privateDrinkobj;//继承组合publicDecorator(Drinkobj){//组合this.objobj;}Overridepublicfloatcost(){// 单品价格单品实现了父类通过父类方法获取单品价格装饰价格returnsuper.getPrice()obj.cost();}OverridepublicStringgetDes(){// obj.getDes() 输出被装饰者的信息returndes getPrice() obj.getDes();}}//具体的Decorator 这里具体指巧克力口味publicclassChocolateextendsDecorator{publicChocolate(Drinkobj){super(obj);setDes( 巧克力 );setPrice(3.0f);// 调味品 的价格}}client调用Drinkorder2newDeCaf();System.out.println(order2 无因咖啡 费用 order2.cost());System.out.println(order2 无因咖啡 描述 order2.getDes());order2newChocolate(order2);System.out.println(order2 无因咖啡 加入一份Chocolate 费用 order2.cost());System.out.println(order2 无因咖啡 加入一份Chocolate 描述 order2.getDes());

相关推荐

MAX14431BAEE+与PIC18F87J10的隔离SPI通信设计与实战
MAX14431BAEE+与PIC18F87J10的隔离SPI通信设计与实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 9:08:53

STM32CubeMX2 与 STM32C5 开发实战:从点灯到 VSCode/CLion 调试
STM32CubeMX2 与 STM32C5 开发实战:从点灯到 VSCode/CLion 调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 9:08:53

TM4C123GH6PZ与MAX14431BAEE+隔离SPI通信链路设计实战
TM4C123GH6PZ与MAX14431BAEE+隔离SPI通信链路设计实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 9:08:53

Java中的引用类型分为四种:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)
Java中的引用类型分为四种:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)

Object obj new Object() 这行代码太熟了,熟到大多数人从没想过:obj 只是引用变量,而“引用”本身是分等级的。除了这种默认、最强硬的一种,JDK 还提供了软引用、弱引用、虚引用。它们改变的其实只是一件事——对象什么时候可以被… · 2026/11/3 9:53:58

【系统架构设计师-Redis(2)】Redis 五大核心数据结构与典型场景实战(含秒杀、限流、队列、排行榜)
【系统架构设计师-Redis(2)】Redis 五大核心数据结构与典型场景实战(含秒杀、限流、队列、排行榜)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 9:53:58

TabPFN-3终极指南:如何在5分钟内掌握这个革命性表格预测模型
TabPFN-3终极指南:如何在5分钟内掌握这个革命性表格预测模型

TabPFN-3终极指南:如何在5分钟内掌握这个革命性表格预测模型 你想知道如何快速上手最先进的表格预测模型吗?TabPFN-3作为一款基于Transformer架构的表格预测基础模型,通过上下文学习技术,能够在单次前向传播中解决复杂的表格预测… · 2026/11/3 9:53:58

LTX-Best-Face-ID vs 传统视频生成工具:为什么它是人脸保留的最佳选择
LTX-Best-Face-ID vs 传统视频生成工具:为什么它是人脸保留的最佳选择

LTX-Best-Face-ID vs 传统视频生成工具:为什么它是人脸保留的最佳选择 LTX-Best-Face-ID是一款基于LTX-2.3(22B)模型的身份保留参考转视频LoRA工具,它能根据人物参考照片和文本提示生成保持人物身份的视频。与传统视频生成工具相… · 2026/11/3 9:53:58

BBDown 下载 B 站视频完整指南:从单集视频到批量番剧的命令行工具
BBDown 下载 B 站视频完整指南:从单集视频到批量番剧的命令行工具

BBDown 下载 B 站视频完整指南:从单集视频到批量番剧的命令行工具 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown BBDown 是一个免费开源的命令行 B 站视频下载器&#xff… · 2026/11/3 9:53:58

如何快速部署Mistral Medium 3.5 128B:5步完成本地vLLM服务器搭建
如何快速部署Mistral Medium 3.5 128B:5步完成本地vLLM服务器搭建

如何快速部署Mistral Medium 3.5 128B:5步完成本地vLLM服务器搭建 Mistral Medium 3.5 128B是一款具有1280亿参数的强大开源AI模型,支持256k超长上下文窗口,具备多模态输入、函数调用和推理能力。本文将通过5个简单步骤,教你如何… · 2026/11/3 9:52:57

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码