装饰者模式

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

原文地址:https://www.jianshu.com/p/2fe021a2a9df

为现有的类增加功能,是继承的一种替代方式
类图如下

 

装饰者模式类图

假设一个场景
我们在学校要考试,然后要给家长签字,说分数之前你要先汇报一下班级最好成绩,然后说出你的分数之后,在说出你在班级的排名
1,建立一个抽象的报告接口

public interface SchoolReport {
    void report();
    void sign(String name);
}

2,实现这个成绩报告接口

public class FourthGradeSchoolReport implements SchoolReport{
    @Override
    public void report() {
        System.out.println("尊敬的家长");
        System.out.println("``````````");
        System.out.println("语文 62 数学 65 体育89 自然63");
        System.out.println("``````````");
        System.out.println("家长签名:");
    }

    @Override
    public void sign(String name) {
        System.out.println("家长签名为:" +name);
    }
}

3,建立一个公共装饰类,具体的装饰要在具体装饰类中定义


    private SchoolReport sr;

    public Decorator(SchoolReport sr){
        this.sr = sr;
    }


    @Override
    public void report() {
        this.sr.report();
    }

    @Override
    public void sign(String name) {
        this.sr.sign(name);
    }
}

5,创建具体的装饰,最高分装饰类

public class HighScoreDecorator extends Decorator{

    public HighScoreDecorator(SchoolReport sr) {
        super(sr);
    }

    private void reportHighScore(){
        System.out.println("这次考试最高分 语文 75 数学 78 体育93 自然80");
    }

    @Override
    public void report() {
        this.reportHighScore();
        super.report();
    }
}

6,学校排名装饰类

public class SortScoreDecorator extends Decorator{

    public SortScoreDecorator(SchoolReport sr) {
        super(sr);
    }

    private void reportSort(){
        System.out.println("我的排名第38名");
    }

    @Override
    public void report() {
        super.report();
        this.reportSort();
    }
}

7,实现调用

public class Main {
    public static void main(String[] args){
        SchoolReport sr = new FourthGradeSchoolReport();
        sr = new HighScoreDecorator(sr);
        sr = new SortScoreDecorator(sr);
        sr.report();
        sr.sign("张三");
    }
}

总结,如果说我们要实现更多的功能可以创建更多的装饰具体装饰类,装饰类和被装饰类可独立发展,互相不耦合
缺点是,多层装饰比较复杂

Oracle19c-集群节点重新添加 Oracle RAC集群在极端情况下,如硬件、主机,集群软件损坏,导致集群节点永久无法使用,需要对集群节点进行修复,删除节点集群信息并重新加入集群,以恢复集群原有的架构。 本文主要讲述一套两节点的Oracle19c RAC集群,节点一orcl01由于主机异常无法正常启动,在对主机进行重装之后,需要将orcl01节点重新加入集群的操作步骤。环境信息: 操作系统:Linux 7 RAC集群:19C 主机节点:orcl0... 阅读详情

相关推荐

stm32f103c8t6+esp8266在WiFi下通过手机控制外设

stm32f103c8t6+esp8266在WiFi下通过手机控制外设前言 前言 通过上一篇,介绍了esp8266的基本功能,这篇将用stm32c8t6配合esp8266进行数据交互,实现用手机通过无线的方式去控制外设、开关等;这里相当于把stm32作为上一篇的串口助手和esp8266进行通信; ...

weixin_45430735的博客 1万+

设计模式 —— 装饰者模式

目录 一、星巴克咖啡订单项目需求 二、方案1-解决星巴克咖啡订单项目(较差) 三、方案2-解决星巴克咖啡订单(好点) 四、装饰者模式定义 4.1 装饰者模式原理 4.2 装饰者模式解决星巴克咖啡订单 五、装饰者模式在 JDK 应用的源码分析 装饰者模式定义: 动态给一个对象添加一些额外的职责,就像在墙上刷油漆,使用Decorator 模式相比用生成子类方式达到功能的扩充显得更为灵活。 初计初衷: 通常可以使用继承来实现功能的扩展,如果这些需要扩展的功能的种类很繁多,那么势必...

认知 行动 坚持 6790

DC综合中set_dft_signal的实战配置与优化策略

本文深入解析了DC综合中set_dft_signal命令的实战配置与优化策略。文章从命令的核心作用出发,详细拆解了-view、-type、-usage等关键参数,并通过扫描使能与时钟门控的实战案例,展示了如何正确配置以实现测试模式下的功耗优化。同时,文章总结了高级优化策略、与低功耗流程的协同方法以及常见错误排查清单,旨在帮助数字芯片设计工程师构建高可测性、低功耗的稳健DFT基础。

weixin_28347369的博客 403

什么是装饰者模式?

一、 什么是装饰者模式 装饰者模式又称包装模式,是指不改变原有对象的基础上,将功能附加到对象上,提供了比继承更有弹性的替代方案.属于结构型设计模式. 二、装饰者模式uml图 装饰器其中包含4个角色: 抽象组件(Component): 可以是一个接口或者抽象类,规定了被装饰者的行为. 具体组件(ConcreteComponent): 实现或继承(component)的一个具体对象.也即被装饰者....

weixin_40980639的博客 2369

深入LSM6DSL的FIFO连续模式:基于STM32和MEMS库的数据流高效处理指南

本文深入探讨了LSM6DSL的FIFO连续模式,结合STM32硬件平台和ST官方MEMS库,提供了高效的数据流处理方案。通过优化I2C通信时序、中断驱动设计以及动态ODR调整,实现低功耗数据采集与处理,显著提升嵌入式传感器应用的性能和续航能力。

weixin_30387799的博客 348

Proteus仿真——电压比较器

电压比较器是一种对输入信号进行鉴别与比较的电路,是组成非正弦波发生电路的基本单元电路。常用电压比较器有如下几种:单限比较器、滞回比较器、窗口比较器、集成电压比较器等。

weixin_58745307的博客 3376

java设计模式——装饰者模式

目录一、装饰者模式的定义与类型二、装饰者模式的适用场景三、装饰者模式的优点四、装饰者模式的缺点五、装饰者模式相关的设计模式六、普通示例:七、普通示例演进,使用装饰者模式示例: 一、装饰者模式的定义与类型 1、定义 在不改变原有对象的基础之上,将功能附加到对象上 提供了比继承更具有弹性的替代方法(扩展原有对象功能) 2、类型 结构型 二、装饰者模式的适用场景 扩展一个类的功能或给一个类添加附加职责 动态的给一个对象添加功能,这些功能可以在动态的撤销 三、装饰者模式的优点 继承的有力补充,比继承灵

小志的博客 1047

Unity之ASE+ShaderGraph+VFX入门到精通 目录

这里是ASE+ShaderGraph+VFX从入门到精通专栏的目录,不停更新中,有问题随时留言或者私信。

TxNet 2840

装饰模式

装饰模式 1.介绍 装饰模式,也称为包装模式,结构型设计模式之一,其使用一种对客户端透明的方式来动态地拓展对象的功能,同时它也是继承关系的一种替代方案之一,在现实生活中你也可以看见很多装饰模式的例子。从人来说,人需要各式各样的一桌,不管穿着什么样,但是对于个人的本质来说是不变的,充其量只是在外面披上一层衣物而已,这就是装饰模式,装饰物也许各不相同但是装饰的对象本质是不变的。 2.定义 动态地给一个...

祁门路搅屎王的博客 1478

ZYNQ 7020 之 FPGA知识点重塑笔记一——串口通信

通信方式一般分为串行通信和并行通信。并行通信是指多比特数据同时通过并行线进行传送。这种传输方式通信线多、成本高,故不宜进行远距离通信,通常传输距离小于 30 米。串行通信是指数据在一条数据线上,一比特接一比特地按顺序传送的方式。这种运输方式通常节省传输线,大大降低使用成本,但数据传送速度慢。综上可知,串行通信主要应用于长距离、低速率的通信场合。本次实验我们主要讲解下串行通信。串行通信一般有2种通信方式:同步串行通信和异步串行通信。同步串行通信。

m0_51430584的博客 3094

河洛理数【陈抟】每月月卦推演每日运卦

Step2:每卦中的日爻遇到二十四节气中的当日为节(月初)或气(月中)的时候,所代表的日期需要变更。正常来说,屯卦分别代表初一到初六,但是由于当月初二时立秋节,所以初爻就不能作为初一、而是要作为立秋节开始时(文中还精算到了立秋是从初二的午时开始),如下。说的代表月运的基础卦上进行当月日卦的推演方式。老样子,我们还是按照书中举得例子卦在这边进行一步步的推演,最后做总结。Step1:从月卦爻下一爻开始,自下而上,进行五个爻的爻变,新推演的每个卦代表六天,如下。假设当月月卦是即济卦,月爻在二爻,如图所示(

Daniel专栏 764

【设计模式】装饰(器)模式 透明装饰模式与半透明装饰模式

装饰模式摘要 装饰模式是一种结构型设计模式,允许动态地为对象添加功能而不改变其结构或使用继承。它通过组合对象的方式扩展功能,比继承更灵活。该模式包含四个角色:抽象构件、具体构件、抽象装饰类和具体装饰类。典型应用场景包括Java I/O流系统、需要动态添加功能的系统以及替代多重继承的情况。以咖啡加料为例,装饰模式可以灵活组合各种配料而不需创建大量子类。代码实现时,装饰器类继承自同一抽象构件,并持有构件对象的引用,通过嵌套调用实现功能叠加。这种模式符合开闭原则,提高了系统的可扩展性和维护性。

weixin_44131922的博客 791

IGCT 测试原理概述

IGCT(Integrated Gate-Commutated Thyristor,集成门极换流晶闸管)是一种高功率半导体器件,基于门极可关断晶闸管(GTO)的原理,但通过集成门极驱动单元和优化结构(如硬驱动技术),实现了更低的导通损耗、更快的开关速度和更高的可靠性。它适用于中高压大功率应用,如高压直流输电(HVDC)、中压变频器和模块化多电平变换器(MMC)。IGCT 的结构为四层 p-n-p-n 器件,门极电流控制导通和关断,阳极电流在关断时快速换流至门极,通常在 1 μs 内完成。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 234

理解装饰者模式

装饰者模式的书面定义是:“动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。”——语出《Android源码设计模式解析与实战》。

hmh0512的专栏 1576

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

装饰模式和python装饰器

​###装饰器和装饰模式 先给出两者的定义: - 装饰器:装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。 - 装饰模式:在不必改变原类文件和使用继承的情况下,动态地扩展一个

Mislead的专栏 1913

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: 责任链模式
下一篇: 策略模式
杨殿生
博客等级 码龄10年 11粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值