【设计模式】装饰模式

设计模式——装饰模式 装饰模式是一种用来替代继承的思想,它使用对象之间的关联关系来取代类之间的继承关系。继承是一种常用的一种拓展原有类的功能的方法,通过创建一个继承父类的子类来拓展原有的功能,在“合成复用原则”中曾提到,在处理类的功能拓展这个问题上应尽量使用类之间的关联关系而少使用继承关系。为什么要用这个模式:以对客户透明的方式动态地给一个对象附加上更多的责任,装饰模式可以在不需要创造更多的子类的情况下,将对象的功能加... 阅读详情

装饰模式概念

属于结构型模式,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活

在这里插入图片描述

装饰模式是利用setComponent来对对象进行包装,这样每个装饰对象的实现就和如何使用这个对象分离开了,每个装饰独享只关心自己的功能,不需要关心如何被添加到对象链当中。

如果只有一个ConcreteComponent类而没有抽象的Component类,那么Decorator类可以是ConcreteComponent的一个子类。同样道理,如果只有一个ConcreteDecorator类,那么就没有必要建立一个单独的Decorator类,而可以把Decorator和ConcreteDecorator的责任合并成一个类

装饰模式是为已有功能动态地添加更多功能的一种方式。装饰模式把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象。因此,当需要执行特殊行为时,客户端代码就可以在运行时根据需要有选择地按顺序地使用装饰功能包装对象。

优点

1.把类中的装饰功能从类中去除,简化原有的类
2.有效地把类的核心职责和装饰功能分开,还可去除相关类中重复的装饰逻辑

缺点

1.多重装饰比较复杂

实例

Component

在这里插入图片描述

ConcreteComponent

在这里插入图片描述

Decorator

在这里插入图片描述

装饰抽象类中的操作方法中被调用的对象是我们setComponent方法传入的对象,在客户端我们通过setComponent方法传入一个正在被装饰的对象,当对上一个对象装饰完毕后,上一个对象便作为下一个装饰类setComponent的参数传入进行装饰,从而形成一条装饰对象链。

ConcreteDecoratorA

在这里插入图片描述

ConcreteDecoratorB

在这里插入图片描述

Client

在这里插入图片描述

首先用ConcreteComponent实例化对象,然后用A对象包装component对象,B对象再包装A对象,最后调用B对象的Operation方法。

结果

在这里插入图片描述

我的想法

其实我们可以把装饰者类和被装饰者类看成同一种类型的类,因为装饰者和被装饰者的实例都继承了Component,但是它们之间承担了不一样的任务,被装饰者类在代码中只能够被装饰,而装饰者类既可以装饰别人也可以被继续装饰。

从上面的例子我们可以看出装饰者中的Operation方法会调用父类的Operation方法,而父类的Operation方法则是调用setComponent传入的对象的Operation方法,也就是被装饰者中的Operation方法。依靠这条链式调用来不停装饰。

10分钟训练你的AI歌手:RVC WebUI声音克隆保姆级教程 本文提供了一份详细的RVC WebUI声音克隆保姆级教程,指导用户如何在10分钟内利用Retrieval-based-Voice-Conversion技术训练专属AI歌手。教程涵盖从环境配置、数据准备、模型训练到最终推理应用的全流程,即使是新手也能快速上手,实现高质量的声音克隆与歌曲生成。 阅读详情

相关推荐

嵌入式Linux网络调试踩坑记:YT8531/YT8521 PHY驱动移植与设备树配置实战

本文深入解析嵌入式Linux系统中YT8531/YT8521 PHY驱动移植与设备树配置的实战经验。从网络不通的常见现象入手,详细介绍了驱动移植关键点、设备树配置详解及常见问题排查技巧,帮助开发者快速解决RGMII接口调试难题,提升嵌入式网络开发效率。

weixin_42525328的博客 445

装饰模式(Decorator模式)详解

在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰模式来实现。 1.装饰模式的定义与特点 装饰(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式...

傅红雪的专栏 6021

AI Agent实战:WorkBuddy安装部署、任务执行与模型接入全教程

AI Agent是当前自动化办公与智能工作流的核心技术,它区别于传统问答式AI,能够理解目标、拆解任务并调用工具交付完整成果。其底层原理基于任务规划、工具调用与结果验证的循环机制,让机器从“提供建议”进化为“完成任务”。在工程实践中,合理配置模型服务(如接入DeepSeek)、设计标准化Skill(技能包)与自定义指令,可以显著提升Agent在报告生成、数据分析、竞品调研等场景中的稳定性与效率。WorkBuddy作为典型的任务式AI工作台,为运营、产品、开发等多角色提供了统一入口,覆盖安装部署、任务描述公式

weixin_26712075的博客 289

23种设计模式之装饰模式

装饰模式是一种用于替代继承的技术,通过无需定义子类的方式动态地增强对象的功能,使用对象间关联关系替代类之间的继承关系。

weixin_45284646的博客 4907

零成本矩阵玩法:1人运营5个账号的自动化工具链配置(2025全平台实战)

通过“AI内容生产+工具链分发+自动化变现”的组合拳,即使是新手也能实现1人运营5个账号的规模化收益。关键在于选对工具与设计标准化流程。未来,矩阵运营的竞争将聚焦于工具使用效率与数据洞察深度,快人一步者方能抢占先机!

TuFuir的博客 3786

用Matlab系统辨识工具箱搞定温控系统建模:从阶跃响应到传递函数(附完整代码)

本文详细介绍了如何使用Matlab系统辨识工具箱进行温控系统建模,从阶跃响应数据采集到传递函数参数辨识的全过程。通过实际案例和完整代码,帮助工程师快速掌握PID控制参数整定技巧,提升温控系统设计效率。特别适合单片机开发者和自动化控制工程师参考。

weixin_30736301的博客 310

23种设计模式之一— — — —装饰模式详细介绍与讲解

装饰模式(别名:包装器)装饰模式(Decorator Pattern)是结构型的设计模式,它允许在运行时动态地向对象添加新的职责或功能,同时保持对象的原始类不变。通过使用装饰器模式,可以在不修改现有代码的基础上扩展对象的功能,

2201_75851346的博客 6288

解决Visual C++2008安装失败,error 1935

重装系统后Visual C++没了,其他都能装上但VC2008会报这个error 1935。鉴于我把网上所有的解决方法排了一遍错,我也不知道是哪一步起效,所以就都放上来了。特别注意:报error 1935的错误原因可能不尽相同,比如我的报错开头为An error occurred,结尾为HRESULT:0x80070005。80070005 拒绝访问通常是权限问题,安装Visual C++无法写入文件夹或注册表(直接跳转第7步)

weixin_44427808的博客 1万+

设计模式(十)—— 装饰模式(定义、案例分析、特点、缺点)

文章目录前言正文一、定义二、情景假设三、情景分析四、模式结构及分析(一) 两种组合模式(二) 两种组合模式的总结(三) 模式分析(1) 模式特点(2) 模式缺点五、使用情景六、延申及拓展总结 前言 文章内容主要参考了刘伟主编的《设计模式(第2版)》,同时也结合了自己的一些思考和理解,希望能帮到大家。 本篇讲解装饰模式,和组合模式一样分成两种类型,一个是透明装饰模式,一个是不透明装饰模式,仔细观察的人可能会发现好像两个的类图有点相像,但是说实话两个思想却是相差很远,我个人觉得如果你是学会模式的内在思考方式

weixin_43905387的博客 3021

MST-GAT: Enhancing Anomaly Detection in Multimodal Time Series with Intra- and Inter-Modal Attention

本文深入解析了MST-GAT模型,这是一种通过模态内与模态间注意力机制增强多模态时间序列异常检测的新方法。它通过构建图结构显式建模传感器间的复杂时空依赖,并结合时间卷积网络与联合优化策略,有效降低了传统方法中常见的误报与漏报问题,在工业监控等场景中展现出卓越性能。

weixin_29079671的博客 150

电磁场仿真:电磁场基础理论_(13).微波技术基础

微波是指频率在300 MHz到300 GHz之间的电磁波。这一频率范围对应的波长为1米到1毫米。

2401_87715305的博客 1318

Java设计模式 ---- 装饰模式

一、什么是装饰模式?        装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系。 定义:动态地给一个对象增加一些额外的职责。就扩展功能而言,装饰模式提供了一种比使用子类更加灵活的替代方案。 二、装饰模式结构与实现 1、结构 (1)Component(抽象构件): 具体构件和抽象装饰类的共同父类。 (2)ConcreteComponent(具体构件)

qq_48651377的博客 4251

VOS中历史话单显示通话会话超时中断详解

假设一种场景:  主叫拨打被叫,主叫方异常离线,被叫方接听,被叫方发送200ok至VOS,VOS传送200ok给主叫,但是主叫方未给出正常ack回应,VOS重发几次后(根据SIP参数设定的重发机制),然后VOS服务器会中断话务,历史话单终止原因为会话超时。 参考呼叫分析信令如下图: ...

非著名运维的博客 5017

设计模式——装饰模式详解

装饰模式动态地给一个对象添加一些额外的功能,相对于继承的方式,更加灵活。 装饰模式经常被误认为是代理模式。装饰模式是以对客户透明的方式扩展对象的功能,是继承关系的一个替代方案。而代理模式则是给一个对象提供一个代理对象,并由代理对象来控制原有对象的引用。 前者重在增加功能,后者重在对代理对象施加控制,不是对对象本身功能的增强。...

关于Android开发的一些技术点总结 ╮( ̄▽ ̄”)╭ 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

设计模式---装饰模式(DesignPattern_Decorator)

摘录自:设计模式与游戏完美开发 十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏美术——刘明恺 联合推荐全书采用了整合...

su9257的博客 117

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

设计模式之装饰模式

本文介绍了装饰模式的理论与实现。装饰模式能动态地为对象添加职责,比继承更灵活。文章首先阐述了装饰模式的结构,包含抽象构件、具体构件、抽象装饰类和具体装饰类4个角色,并给出了UML类图。然后介绍了透明和半透明两种装饰模式的区别,以及省略抽象装饰类的简化方式。最后通过Java代码示例演示了透明和半透明装饰模式的实现,分别以GUI组件添加滚动条和图形添加阴影效果为例。装饰模式适用于需要动态扩展对象功能且避免继承导致类爆炸的场景,但会增加系统复杂度。完整代码已上传至GitHub仓库。

C2961034922的博客 983

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

设计模式 | 装饰模式

1 | 装饰模式的概述 我们在了解装饰模式之前,先回顾下生活中的几个常见现象,举例如下: 新房的装修,房屋装修并没有改变房屋居住的本质,但可以让房屋变得更漂亮,更温馨,更实用,更满足居家需求。 相片的包装,照相馆中把原相片清洗出来后,会对上面做些包装/装饰,相片镀膜,添加相框等处理,让整体更加美观,防潮保存更长的时间。 在软件设计中,类似上面的场景我们也可以把对象在不改变结构的情况下对其加工扩展修饰,使得对象具有更加强大的功能,这种技术在设计模式中就叫装饰模式。装饰模式可以在不改变一个对象本身功能的基

ChaITSimpleLove的博客 4770

设计模式Python版 装饰模式

介绍了GOF设计模式中的装饰模式,用Python实现装饰模式的示例,以及装饰模式在Django中的应用。

分享、交流、合作 1284

装饰模式——初学JAVA设计模式

文章目录一、基本概念模式角色二、简单实例实例一、变形金刚类图代码实现结果截图实例二、喜羊羊与灰太狼类图方式一:透明模式代码实现结果截图方式二:半透明模式+透明模式代码实现结果截图三、透明模式和半透明模式的区别辨析透明模式半透明模式四、小结优缺点适用场景 一、基本概念 装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系。 装...

发子鸡的博客 1497

【设计模式】用Java实现装饰模式

装饰模式(Decorator Pattern)是一种结构型设计模式它允许在不改变现有对象结构的情况下,动态地将责任附加到对象上。装饰模式通过将对象包装在装饰器对象中,形成一条装饰链,每个装饰器对象都可以在被装饰对象的行为前后加上自己的行为。装饰模式的核心思想是通过组合而不是继承来扩展对象的功能。它遵循开放-关闭原则,即对扩展开放,对修改关闭,使得我们可以在不修改现有代码的情况下,灵活地添加新的功能。应用场景:需要在不改变现有对象结构的情况下,动态地为对象添加额外的功能。

分享Java硬核干货 1万+

Java设计模式之装饰模式

装饰模式(Decorator Pattern)是一种结构型设计模式,用于在运行时动态地给对象添加额外的职责,而无需通过继承来扩展对象的功能。

LHR__123的博客 642

设计模式-装饰模式

这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。现在顾客可以要求加牛奶 (Milk)、摩卡 (Mocha)、豆浆 (Soy)、奶泡 (Whip) 等调料。如果需要添加功能,客户端将这个 ConcreteComponent 对象传递给一个 ConcreteDecorator 对象的构造函数,创建一个装饰后的对象。如果被装饰对象的接口很庞大,那么装饰器的实现也会变得复杂。// 通常,getDescription() 在抽象装饰器中可能是抽象的,或者直接委托。

2302_79637382的博客 919

Java设计模式-装饰模式

装饰模式是一种非常有用的设计模式,它可以动态地为对象添加新的功能,而不需要修改原有的代码。通过定义一个抽象的装饰器类和具体的装饰器类,我们可以非常方便地扩展对象的功能,以满足不同的业务需求。虽然装饰模式增加了代码的复杂性和运行时开销,但是它在许多情况下仍然是一种非常有效的解决方案。

小薯条的博客 703
上一篇: 【学习】Android四大组件启动流程(2)——Service的启动和绑定流程
下一篇: 【学习】Android四大组件启动流程(3)——BroadcastReceiver的工作过程
Panic  Lin
博客等级 码龄6年 81粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值