java23种设计模式(九) -- 装饰器模式(结构型设计模式)

Java 中的 23 种设计模式详解 本文介绍了Java中的23种经典设计模式,主要分为三类:创建型、结构型和行为型模式。创建型模式关注对象创建方式,包括单例模式(确保唯一实例)、原型模式(复制创建)、建造者模式(分步构建复杂对象)和工厂方法模式(子类决定实例化)。文章详细阐述了每种模式的核心思想、实现方式、应用场景和优点,并提供了Java代码示例和注释,帮助开发者理解如何在实践中应用这些模式解决复杂设计问题。 阅读详情

装饰器模式

简介

Decorator装饰器,顾名思义,就是动态地给一个对象添加一些额外的职责,就好比为房子进行装修一样。因此,装饰器模式具有如下的特征:

    它必须具有一个装饰的对象。

    它必须拥有与被装饰对象相同的接口。
    
    它可以给被装饰对象添加额外的功能。

用一句话总结就是:保持接口,增强性能。

装饰器通过包装一个装饰对象来扩展其功能,而又不改变其接口,这实际上是基于对象的适配器模式的一种变种。它与对象的适配器模式的异同点如下。

   相同点:都拥有一个目标对象。

   不同点:适配器模式需要实现另外一个接口,而装饰器模式必须实现该对象的接口。

典型的装饰器模式的图

在这里插入图片描述

结构

通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类的方式并不可取,在面向对象的设计中,我们应该尽量使用组合对象而不是继承对象来扩展和复用功能,装饰器模式就是基于对象组合的方式的。

装饰器模式以对客户端透明的方式动态地给一个对象附加上了更多的责任。换言之,客户端并不会角色对象在装饰前和装饰后有什么不同。装饰器模式可以在不用创建更多子类的情况下,将对象的功能加以扩展。

装饰器模式中的角色有:

  1. 抽象构件角色:给出一个抽象接口,以规范准备接受附加责任的对象

  2. 具体构件角色:定义一个将要接受附加责任的类

  3. 装饰角色:持有一个构建对象的实例,并定义一个与抽象构件接口一致的接口

  4. 具体装饰角色:负责给构建对象贴上附加的责任

代码

/**
 * Sourcable接口定义了一个方法 operation()
 */
public interface Sourcable {

    public void operation();    
    
} 

/**
 * Source.java 是 Sourcable.java 的一个实现, operation() 方法的实现就是简单的负责往控制台输出一个字符串:
 */
public class Source implements Sourcable {
    
    public void operation() {    
        System.out.println("原始类的方法");    
    }    
    
}   

/**
 * 装饰器类 Decorator1.java 采用了典型的对象适配器模式,它首先拥有一个 Sourcable 对象 source ,
 * 该对象通过构造函 数进行初始化。然后它实现了 Sourcable.java 接口,以期保持与 source 同样的接口,
 * 并在重写的operation() 方法中调用  source 的 operation() 函数,在调用前后可以实现自己的输出,这就是装饰器所扩展的功能
 */
public class Decorator1 implements Sourcable {
    
    private Sourcable sourcable;    
    public Decorator1(Sourcable sourcable){    
        super();    
        this.sourcable=sourcable;    
    }    
        
    public void operation() {    
        System.out.println("第1个装饰器前");    
        sourcable.operation();    
        System.out.println("第1个装饰器后");    
    
    }    
    
} 

/**
 * 装饰器类Decorator2.java 是另一个装饰器,不同的是它装饰的内容不一样,即输出了不同的字符串
 */
public class Decorator2 implements Sourcable {
    
    private Sourcable sourcable;    
    public Decorator2(Sourcable sourcable){    
        super();    
        this.sourcable=sourcable;    
    }    
    public void operation() {    
        System.out.println("第2个装饰器前");    
        sourcable.operation();    
        System.out.println("第2个装饰器后");    
    
    }    
    
}   

/**
 * 装饰器类Decorator3.java 是第三个装饰器,不同的是它装饰的内容不一样,即输出了不同的字符串
 */
public class Decorator3 implements Sourcable {
    
    private Sourcable sourcable;    
    public Decorator3(Sourcable sourcable){    
        super();    
        this.sourcable=sourcable;    
    }    
    public void operation() {    
        System.out.println("第3个装饰器前");    
        sourcable.operation();    
        System.out.println("第3个装饰器后");    
    
    }    
    
}   

测试类

public class ApiTest {

    @Test
    public void testCommand(){
        Sourcable source = new Source();

        // 装饰类对象
        Sourcable obj = new Decorator1(new Decorator2(new Decorator3(source)));
        obj.operation();
    }

}

在这里插入图片描述

小结

  • 使用装饰器模式满足单一职责原则,你可以在自己的装饰类中完成功能逻辑的扩展,而不影响主类,同时可以按需在运行时添加和删除这部分逻辑。另外装饰器模式与继承父类重写方法,在某些时候需要按需选择,并不一定某一个就是最好。
  • 装饰器实现的重点是对抽象类继承接口方式的使用,同时设定被继承的接口可以通过构造函数传递其实现类,由此增加扩展性并重写方法里可以实现此部分父类实现的功能。
  • 就像夏天热你穿短裤,冬天冷你穿棉裤,雨天挨浇你穿雨衣一样,你的根本本身没有被改变,而你的需求却被不同的装饰而实现。生活中往往比比皆是设计,当你可以融合这部分活灵活现的例子到代码实现中,往往会创造出更加优雅的实现方式。
【23种设计模式】装饰器模式 使用组合替代继承,对原生对象的方法做增强,增加新的行为和能力。 装饰器设计模式(Decorator)是一种结构型设计模式,它允许动态地为对象添加新的行为。它通过创建一个包装器来实现,即将对象放入一个装饰器类中,再将装饰器类放入另一个装饰器类中,以此类推,形成一条包装链。 在不改变原有对象的情况下,动态地添加新的行为或修改原有行为。 阅读详情

相关推荐

FPGA人脸识别检测(先获取人脸图像以及灰度二值化)

由于图片有空洞等缺陷,所以后面要进行中值滤波、腐蚀、膨胀等算法处理,然后再对人脸进行框选,最后显示出来。最终的成像应该是下面这样的。(后面有时间再接着做哈哈哈)5、通过modelsim将操作后的图片数据写入gray_img.txt里面后,用matlab将txt转成图片。1、先用matlab将图片转换成txt数据,代码如下。读取图片的方式按照博客咸鱼里的方式来做,如下。2、FPGA读取txt数据。4、FPGA顶层模块及仿真。3、FPGA灰度二值化。

weixin_46312715的博客 2530

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

前言这篇文章主要讲述为什么是装饰模式,装饰模式的构建,代码实现装饰模式,装饰模式的应用场景等知识点的讲解,让我们一起来学习吧,lets go.1,什么是装饰模式动态的为一个类增加新的功能,装饰模式是一种用于代替继承技术的模式,无需通过继承增加子类就能够灵活的扩展新功能。2、装饰模式的构建实现细节: Component抽象构件角色: 真实对象和装饰对象有相同的接口。这样,客户端对象就能够以与真实对象...

weixin_36163504的博客 260

数模【Mathematica(安装、入门方法、基本计算、基本图形、创建互动模型、利用数据、幻灯片演示、完整实例)】

Mathematica(安装and激活、入门方法、基本计算、基本图形、创建互动模型、利用数据、幻灯片演示、完整实例) Mathematica_11.3.0 安装教程 Mathematica11.3 激活 P1 笔记本 P2 入门方法 P3 基本计算 P4 基本图形 P5 创建互动模型 P6 利用数据 P7 演示 P8 完整实例

upward 12万+

java 装饰器_java实现装饰器模式(Decorator Pattern)

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

weixin_42150341的博客 297

告别过热焦虑:用Ansys Icepak给你的电子设备做个“水冷体检”(附冷板案例全流程)

本文详细介绍了如何利用Ansys Icepak进行电子设备水冷系统的热仿真分析,帮助工程师解决设备过热问题。通过冷板案例全流程演示,展示了从几何处理、材料设定到求解器设置和后处理的关键步骤,提升散热设计效率与准确性。

weixin_29299807的博客 439

OFDM时频脉冲形状与子载波正交性的理解

从多载波调制的角度来理解子载波间正交,首先要明确OFDM默认的脉冲成型是时域矩形窗,时域上每个子载波 ej2πfnte^{j2πf_nt}ej2πfn​t 都被一个矩形窗脉冲gT(t)g_T(t)gT​(t)成型。其次,OFDM子载波间隔 等于 OFDM符号周期的倒数,这是子载波正交的条件。 ​ 根据时频脉冲形状,可以从时域上理解如左图(注意是矩形脉冲 乘 复指数),从频域上理解如右图(sinc脉冲 卷 频点)。 ​

weixin_43803202的博客 2213

java 装饰器_java之装饰器模式

Decorator Pattern(装饰器模式),定义:Attach additional responsibilities to an object dynamically. Decoratorsprovide a flexible alternative to subclassing for extending functionality.(动态地给一个对象添加一些额外的职责。就增加功能来说...

weixin_42339801的博客 961

【C语言】一文带你拿捏分支和循环语句(一万字详细讲解)

if/switch语句、while/fo/do...while循环语句、goto语句详解

StackFrame 1231

Java装饰器模式详解

Java装饰器模式详解 @author:Jingdai @date:2021.06.03 案例 假设你开了一个咖啡店,目前有三种咖啡,HouseBlend、DarkRoast和Decaf,每种咖啡都有价格,可以设计一个抽象类 Beverage 作为父类,这三个咖啡去继承Beverage,代码如下。 Beverage.java public abstract class Beverage { public abstract double cost(); // other methods }

qq_41512783的博客 276

从 SAP ABAP 到 S/4HANA,SAML 2.0 单点登录到底是怎么跑起来的

在很多 SAP 项目里,SSO 不是一个锦上添花的功能,而是系统能不能顺利上线的基本门槛。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1048

基于mengzi-t5训练生成式模型

【代码】基于mengzi-t5训练生成式模型。

开卷有益 169

Java中23种设计模式的详细介绍

Java开发中23种设计模式详细介绍设计模式介绍设计模式分类设计模式六大原则开闭原则(Open Close Principle)里氏代换原则 设计模式介绍 设计模式(Design Patterns): 一套被反复使用,多数人知晓,经过分类编目,代码设计的总结 使用设计模式是为了可重用代码,让代码更容易理解,保证代码可靠性 项目中合理运用设计模式可以完美的解决很多问题,每种模式都有相应的原理...

攻城狮Chova的博客 1万+

扣子Coze智能体万字教程:从入门到精通,一文掌握AI工作流搭建

智能体 = 角色设定 + 提示词 + 变量输入一个好提示词的核心是结构、风格和复用性创建后可以一键发布成网页应用、对话助手整个过程0代码,只靠配置,人人可学,人人可用四、进阶一:理解「工作流」的威力如果你已经用扣子创建了几个简单的智能体,比如写个爆款小红书文案、生成一段短视频脚本,那恭喜你已经入门。但如果你还停留在“一个智能体 = 一段提示词”的层级,你离真正的智能体生产力革命,还差一步:学会搭建“工作流”——让多个大模型自动协同完成任务。

互联网架构师笔记 3493

设计模式--装饰器模式【结构型模式】

装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许在运行时动态地向对象添加新的功能,而不改变其结构和实现,它在运行时给对象动态地添加一些额外的职责,装饰者模式通过装饰来实现功能的扩展,装饰器的核⼼就是在不改原有类的基础上给类新增功能。我们再次使用车来做为演示的实物载体,生活中我们买了爱车之后,除了 4S 店交付的新车,我们把车开回家之后,还会对车进行一番装饰0例如地垫、儿童座椅、360 安全影像等等,而这些都属于对爱车的装饰,也就是具体的装饰器,而我们的爱车就是抽象组件。

weixin_42118323的博客 2378

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java23种设计模式详解

提供了一种方式来封装一组具有相关联的或相互依赖的对象的创建。一个抽象工厂定义了一个接口,用于创建相关或依赖对象的家族,而实际的具体工厂则负责生成具体的对象。下面是一个使用Java实现的抽象工厂模式的简单示例:假设我们有一个图形应用程序,需要绘制不同类型的形状(如圆形、矩形等)和颜色填充策略(如红色、蓝色等)。每种形状都可以有不同的颜色填充,这就构成了两个相关的对象家族。// 抽象产品接口:形状// 具体产品:圆形@Override// 具体产品:矩形@Override。

2301_76508397的博客 3791

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

全面解读Java的23种设计模式

需要注意的是,混合使用设计模式要谨慎,不要过度使用设计模式,以免代码过于复杂和难以维护。选择合适的设计模式和合适的组合方式,可以使代码更加简洁、高效和易于维护。

weixin_39158966的博客 3265

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java 23种设计模式 - 结构型模式7种

Java 23种设计模式 - 结构型模式 7种

26857259 1396

Java二十三种设计模式-装饰器模式(7/23)

装饰器模式是一种设计模式,允许用户在不修改对象自身的情况下,向一个对象添加新的功能。这种模式通过创建一个包装对象,也就是装饰器,来包裹实际对象,从而在不修改实际对象的基础上扩展其功能。装饰器模式提供了一种灵活的方式来扩展对象的功能,而无需改变对象的结构。通过本文的深入分析,希望读者能够对装饰器模式有更全面的理解,并在实际开发中做出合理的设计选择。

小相探索IT世界 1938

Java中23种设计模式

Java中的23种设计模式源自经典的《设计模式:可复用面向对象软件的基础》(也被称作Gang of Four,GoF)一书。这些模式可以分为三大类:创建型模式、结构型模式和行为型模式。

二哈喇子! 1660

23种设计模式一装饰器模式

装饰器模式是一种动态扩展对象功能的结构型设计模式,通过组合而非继承实现灵活的功能扩展。核心结构包括抽象组件、具体组件、抽象装饰器和具体装饰器四个角色,通过层层嵌套实现功能叠加。该模式具有高灵活性和扩展性,避免了类爆炸问题,典型应用如Java IO流体系。但缺点是会增加对象数量和调试复杂度。适用于需要动态添加职责且不能使用继承的场景,如咖啡订单系统中添加配料或IO流的功能扩展。

J_liaty的博客 1268

设计模式(十)结构型:装饰器模式详解

装饰器模式(Decorator Pattern)是 GoF 23 种设计模式中的结构型模式之一,其核心价值在于动态地为对象添加额外的职责或功能,而无需通过继承来扩展类。

谦与谦寻的神隐 924

JAVA 23种设计模式【入门篇】

😹 作者: 爱摸鱼的小凯 😻 爱摸鱼的小凯的博客 😽 觉得博主文章写的不错的话,希望大家三连(✌关注,✌点赞,✌评论),多多支持一下!!!

只有登上山顶,才能看到那边的风光 1万+

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

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

小威的博客 2万+

在Java中23种设计模式,分类以及代码示例

这些设计模式各自具有不同的目的和应用场景,可以帮助开发者解决各种不同的问题,并提供良好的代码结构和可维护性。在Java中,设计模式可以分为23种,以三个不同的分类进行划分。结构型模式(Structural Patterns)行为型模式(Behavioral Patterns)

杜盟恩的博客 1559

深入剖析Java 23种设计模式:从入门到精通

设计模式(Design Pattern)是一套被反复使用、多数人知晓、经过分类编目的、代码设计经验的总结。它的核心目的是为了实现代码的可重用性,让代码更易于被他人理解,同时保证代码的可靠性,使代码编写真正工程化,堪称软件工程的基石脉络。设计模式的概念最早起源于建筑领域,后来被引入到软件工程中。1995 年,Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为《Design Patterns - Elements of Reus

u010843275的博客 945

浅谈Java23种设计模式之结构型模式的几种使用场景

java23种设计模式之结构型设计模式的使用场景

TaoShao521的博客 1498
上一篇: java23种设计模式(八) -- 组合模式(结构型设计模式)
下一篇: java23种设计模式(十) -- 外观模式(结构型设计模式)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值