设计模式--装饰器模式

.NET 设计模式—装饰器模式(Decorator Pattern) 装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许你在不改变对象接口的前提下,动态地将新行为附加到对象上。这种模式是通过创建一个包装(或装饰)对象,将要被装饰的对象包裹起来,从而实现对原有对象功能的增强和扩展。 阅读详情

简介

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

装饰器模式中的角色有:
抽象构件(Component)角色:给出一个抽象接口,已规范准备接收附加责任的对象。

public interface Component {
    public void sampleOpreation();
}

具体构件(ConcreteComponent)角色:定义一个将要接收附加责任的类

public class ConcreteComponent implements Component {
    @Override
    public void sampleOpreation() {
        // TODO 完成相关的业务代码
    }
}

装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。

public class Decorator implements Component {
    private Component component;
    
    public Decorator(Component component) {
        this.component = component;
    }
    
    @Override
    public void sampleOpreation() {
        //委派给构件
        component.sampleOpreation();
    }

}

具体装饰(ConcreteDecorator)角色:负责给构件对象“贴上”附加的责任。

public class ConcreteDecoratorA extends Decorator {
    public ConcreteDecoratorA(Component component) {
        super(component);
    }
    
    @Override
    public void sampleOpreation() {
        super.sampleOpreation();
        //TODO 完成相关的业务代码
    }
}

装饰器模式的类图如下:
在这里插入图片描述

示例

仍然以打印机为例,添加3D打印
1.抽象构件(Component)角色

public interface Printer {
    void print();
}

2.具体构件(ConcreteComponent)角色

public class PaperPrinter implements Printer {
    @Override
    public void print() {
        System.out.println("Paper Printer");
    }
}
public class PlasticPrinter implements Printer {
    @Override
    public void print() {
        System.out.println("Plastic Printer");
    }
}

3.装饰(Decorator)角色

public class PrinterDecorator implements Printer {
    private Printer printer;

    public PrinterDecorator(Printer printer) {
        this.printer = printer;
    }

    @Override
    public void print() {
        printer.print();
    }
}

4.具体装饰(ConcreteDecorator)角色

public class Printer3D extends PrinterDecorator {
    public Printer3D(Printer printer) {
        super(printer);
    }

    @Override
    public void print() {
        System.out.println("3D");
        super.print();
    }
}

5.Main验证

public class DecoratorMain {
    public static void main(String[] args) {

        Printer plasticPrinter = new PlasticPrinter();
        Printer plastic3DPrinter = new Printer3D(new PlasticPrinter());
        Printer paper3DPrinter = new Printer3D(new PaperPrinter());
        plasticPrinter.print();
        plastic3DPrinter.print();
        paper3DPrinter.print();

    }
}

【Java设计模式】Java设计模式之(十九)装饰器模式(Decorator Pattern) 这种类型的设计模式属于结构型模式。 一、装饰器模式介绍 1.1 含义 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 1.2 适用场景 ① 扩展一个类的功能。 ② 动态增加功能,动态撤销。 1.3 主要解决 子类膨胀的问题。 一般的,我们为了扩展一个类经常使用继承方式实现 阅读详情

相关推荐

Petalinux实战:3种方法调试AXI UART Lite设备(含minicom/screen/直接寄存器操作对比)

本文详细介绍了在Zynq平台上使用Petalinux调试AXI UART Lite设备的三种实用方法:用户空间工具(minicom/screen)、应用层程序(termios配置)和底层寄存器直接操作。文章对比了各方法的优缺点与适用场景,并重点解析了设备树配置、驱动加载等关键环节,帮助开发者快速定位并解决串口通信中的常见问题。

weixin_29190169的博客 432

设计模式(七)—— 装饰器模式

装饰器模式的定义与特点 装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。 装饰器模式的主要优点有: 不改变原类文件。 不使用继承。 动态扩展。 其主要缺点是:装饰器模式会增加许多子类,过度使用会增加程序得复杂性。 装饰器模式的结构与实现 1. 模式的结构 装饰器模式主要包含以下角色。 抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。 具体构件(Concre

ForgetSky的博客 545

从SRIOV到SIOV:PCIe虚拟化技术下一代革命

如果说SR-IOV是过去十年PCIe虚拟化的“标杆方案”,那SIOV就是为超大规模云数据中心、AI集群量身打造的“破局者”——它解决了SR-IOV难以逾越的扩展性瓶颈,同时平衡了性能、成本与生态兼容性。今天就从“为什么需要SIOV”到“SIOV到底强在哪”,再到“未来要解决什么问题”,做一次全方位深度拆解。

存储随笔 2557

简单代码实现装饰器模式

定义:装饰模式是一种用于代替继承的技术,无须通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。那么装饰器的职责就是动态地为一个对象增加新的功能。 装饰器的构造: 1、抽象构件角色 ICar 2、具体的构件角色 Car 3、装饰器角色 SuperCar 4、具体的装饰器角色 FlyCar、WaterCar、AICar 代码实现: 基础接口 p...

温先生的学习之路 583

汽车电缆选型实战:基于ISO 19642-3~12的7类电缆电压/材料/场景对照表

本文详细解析了基于ISO 19642-3~12标准的7类汽车电缆选型实战,涵盖电压等级、导体材料和场景应用的对照表。通过全参数速查表和典型选型陷阱分析,帮助工程师快速掌握从低压信号线到高压动力电缆的选型逻辑,提升新能源汽车与智能驾驶技术的安全性和可靠性。

weixin_29043895的博客 365

【软件逆向学习记录】x64dbg调试器入门2:主调试窗口功能及字符串搜索功能介绍

在x64dbg中, ​​CPU视图 是调试过程中最核心的界面,通常被称为​​主调试窗口​​或​​调试视图​​,总体分为四个区域,代码区(反汇编),数据区(内存窗口),寄存器区和堆栈区,详细位置如下图:示例数据代码区最左侧为内存地址,第二块区域为程序代码值,原始程序代码经编译和汇编后变为二进制机器码存储在计算机中,调试器将其展示为易于阅读的十六进制,第三块区域是机器码反汇编后的汇编代码,最右侧为代码的注释窗口,有一些原始的注释,也可以自己添加注释PS:汇编和反汇编解释。

tusikong的博客 2922

装饰器模式

学了C++基本的语法都知道继承可以让子类拥有更多的功能,除了继承还有组合,委托,也能让一个类的功能增加。设计模式,这个设计是设计继承,组合,委托,之间相互叠加的方式,让其符合业务需求。 装饰器模式是多态和托管的运用,它在一个类A中为类B修改或增加一些属性,增加或修改后,因为类A与类B同为一个基类的派生类(也可能派生多次),因此依然可以用基类的对象指针指向类B的实例。因此整体看来,好像为类A的实例装饰了一些属性一样。 这些代码都是在学习这些的过程中码的。。。。。 上代码,亲测有效...

宝安小雨 258

MATLAB实战:5分钟搞定雷达信号分选SDIF算法(附完整源码下载)

本文详细介绍了如何在MATLAB中快速实现雷达信号分选的SDIF算法,通过序列差直方图统计高效识别脉冲重复间隔(PRI)。文章包含完整源码下载,从算法原理到实战调优技巧,帮助工程师在5分钟内掌握核心实现方法,显著提升雷达信号处理效率。

info6的博客 614

设计模式之装饰器模式(Decorator Design Pattern)

装饰器模式是常用设计模式之一,装饰器模式与代理模式非常像,区别是代理模式是原始功能上附加功能,而装饰器模式是增强原始功能。 代理模式:我(代理)不是你(原始类),我只是代表你的(部分或全部)能力,不会改变你的能力; 装饰器模式:我(装饰器)就是你(原始类),我是你的伪装,不仅有你的全部能力,还可以改变你的能力; //人类 interface HumanBeing { //速度 public void velocity(); //反应 public void reaction();

xjj1314的专栏 460

ComfyUI实战:AnimateDiff与ControlNet结合,打造无缝风格化视频转绘

本文详细介绍了如何利用ComfyUI平台,结合AnimateDiff与ControlNet插件,实现高质量的视频风格化转绘。通过搭建节点工作流、调整关键参数,有效解决画面闪烁与失真问题,并分享了进阶玩法与常见问题解决方案,帮助用户轻松打造流畅、风格统一的动态视觉效果。

weixin_29039773的博客 335

EEGLAB安装、EDF数据导入、EEG预处理(Matlab)

目录下载和安装下载安装遇到问题及解决方案导入EDF数据EEG预处理 下载和安装 下载 链接:https://pan.baidu.com/s/17eMT6B7LgZ4PyqWvD5ixmg 提取码:12gz 安装 **第一步:**将下载下来的文件解压,修改名称为eeglab,将此文件夹存放在matlab的安装目录里的toolbox文件夹下,下图是我的路径,需要拷贝到自己相对应的路径中 第二步: 打开Matlab软件,点击主页中的设置路径 设置路径 点击添加并包含子文件夹,将eeglab文件夹添加进来,保

y18771025420的博客 1万+

设计模式 15 Decorator Pattern 装饰器模式

Decorator Pattern 装饰器模式是一种结构型设计模式,它允许在运行时给对象添加新的行为或职责,而无需修改对象的源代码。这种模式通过创建一个包装对象,也称为装饰器,来包裹原始对象,装饰器对象与原始对象有相同的接口,因此可以在不改变客户端代码的情况下,增加或修改对象的功能。装饰器模式的优点包括:动态地给对象添加新的行为,而无需修改对象的源代码或继承结构。可以独立地增加对象的功能,因为每个装饰器都是独立的类。保持了类的单一职责,使得代码更易于维护和扩展。

jxusthusiwen的专栏 876

YOLOv8【第九章:模型部署篇·第2节】一文搞懂,模型剪枝与压缩技术!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1524

结构型设计模式: 装饰器模式(Decorator Pattern)

设计模式;结构型模式;结构型设计模式;装饰器模式(Decorator Pattern)Decorator模式能动态地给一个对象添加一些额外的职责。就增加功能来说, Decorator模式相比生成子类更为灵活。装饰器模式(Decorator Pattern)属于结构型模式,又称为包装器(Wrapper)模式。结构型模式涉及到如何组合类和对象以获得更大的结构;结构型类模式采用继承机制来组合接口或实现。

智能多媒体 523

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【设计模式】深入解析装饰器模式(Decorator Pattern)

装饰器模式详解

qq_59344127的博客 1968

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

设计模式中的装饰器模式(Decorator Pattern)

在软件开发中,常常需要给某个对象**动态地添加额外功能**,同时又不想修改它的代码或使用子类继承。**装饰器模式(Decorator Pattern)** 正是为了解决这个问题而设计的,它提供了一种**灵活、可扩展**的方式来增强对象的功能。本文将详细介绍**装饰器模式的概念、应用场景,并通过 Python 代码示例来展示其实现方式**。

962

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

23种设计模式之装饰器模式(Decorator Pattern)

本篇文章将23种设计模式中的装饰器模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 2万+

设计模式-08装饰器模式Decorator Pattern

装饰器模式是一种动态扩展对象功能的结构型设计模式。它通过将对象包装在装饰器类中,而非使用继承,实现了灵活的功能扩展。该模式适用于需要动态添加或撤销职责的场景,尤其当子类继承不适用时。典型实现包含组件接口、具体组件和装饰器类,通过多层包装实现功能叠加。示例展示了咖啡店场景,通过不同装饰器组合可灵活定制咖啡价格和描述。这种模式保持了类的单一职责原则,同时提供了比继承更灵活的功能扩展方式。

d3y1`5 81_09 1264

[设计模式] 装饰器模式(Decorator Pattern)

什么是装饰器模式? 装饰器模式又称为包装模式(Wrapper Pattern),属于结构型设计模式。顾名思义,这个模式是在不必改变原类和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,来实现功能的扩展。 为什么使用装饰器模式? 通过该模式的定义我们可以推测出该模式的优点,即:在不改变原类和使用继承的情况下,可以动态的扩展一个对象的功能。 在我们进行编码实践的过程中,通常是先完成某个类的基本功能,在后续的开发过程中在慢慢加入新的功能,所以扩展对象的功能这件事是不可避免的。那么通常来说,我

asd13518662的博客 315

设计模式之装饰器模式(decorator pattern)

装饰器模式主要对现有的类对象进行包裹和封装,以期望在不改变类对象及其类定义的情况下,为对象添加额外功能。是一种对象结构型模式。需要注意的是,该过程是通过调用被包裹之后的对象完成功能添加的,而不是直接修改现有对象的行为,相当于增加了中间层。类似于python中的@装饰器。 下面还是按照老规矩,先来了解一下该模式相关的概念和原理,然后通过两个具体的实例体会一下如何在实际开发中应用该模式。...

weixin_30362083的博客 214

设计模式 | 九、装饰器模式(与继承的区别,与适配器/代理的区别)[DecoratorPattern]

设计模式-装饰器模式:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。

GiraffePeng的博客 4954

【设计模式】——装饰器模式(Decorator Pattern)

在软件开发中,设计模式是解决常见问题的最佳实践。装饰器模式(Decorator Pattern),又称为包装器模式(Wrapper Pattern),是一种结构型设计模式,它允许在不改变原有对象结构的基础上,动态地给对象添加一些新的职责(即增加其额外功能)。这种模式在C++中的应用广泛,特别适合于需要灵活扩展对象功能的场景。

J^T的博客 2034

设计模式|装饰器模式(Decorator Pattern)

装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许在不改变原始对象的基础上,动态地给对象添加新的功能或责任。这种模式是通过创建一个包装对象,也就是装饰器,来包裹真实的对象,然后在装饰器中添加新的行为或功能。这样,就可以在运行时动态地修改对象的行为。

weixin_44435110的博客 965

java设计模式之装饰器模式(Decorator Pattern)

一、什么是装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 在不想增加更多子类的情况下扩展类,动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类...

heidou_2016的博客 207

设计模式之装饰器模式 (Decorator Pattern)

装饰器模式是一种动态扩展对象功能的设计模式,通过嵌套包装替代继承,实现功能的灵活组合。其核心是将功能扩展从"纵向继承"转变为"横向包装",每个装饰器持有被装饰对象并在调用前后添加行为。典型应用包括Python的@decorator语法和Java的IO流包装。该模式解决了继承导致的类爆炸问题,支持运行时动态配置,但会牺牲对象身份明确性并增加调试复杂度。适用于需要动态、可撤销添加职责且功能可任意组合的场景,体现了开闭原则的思想。

goodparty的专栏 1954
上一篇: 设计模式--适配器模式
下一篇: 设计模式--桥接模式
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值