【设计模式】结构型02装饰模式(Decorator Pattern)

在idea 中添加和删除模块Module操作 主要介绍了在idea 中添加和删除模块Module操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 立即下载

装饰模式(Decorator Pattern)


意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。

主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。

何时使用:在不想增加很多子类的情况下扩展类。


以下是demo:

这里我省略了消费者House类,直接使用核心实现方式进行解释:

1、装饰类接口与装饰对象:

package com.pat.decorator;
/**
 * 装饰类接口-所有装饰类实现本接口
 * @author ZX
 *
 */
public interface Decorator{
	void decorat();
}

/**
 * 下面是所有的装饰对象,各自持有一个(根据实际情况)装饰对象
 * @author ZX
 * 
 *
 */
class Sofa implements Decorator{
	private Decorator decorator;

	@Override
	public void decorat() {
		if(decorator!=null)
		decorator.decorat();
		System.out.println("装沙发");
		
	}
	public Sofa() {}
	public Sofa(Decorator decorator) {
		this.decorator=decorator;
	}
	
}
class Desk implements Decorator{
	private Decorator decorator;
	@Override
	public void decorat() {
		if(decorator!=null)
		decorator.decorat();
		System.out.println("装桌子");
		
	}
	public Desk() {}
	public Desk(Decorator decorator) {
		this.decorator=decorator;
	}
}
package com.pat.decorator;

public class Test {
	public static void main(String[] args) {
		Sofa sofa = new Sofa();
		Desk desk = new Desk(sofa);
		Computer com = new Computer(desk);
		com.decorat();
	}
}

class Computer implements Decorator{private Decorator decorator;@Overridepublic void decorat() {if(decorator!=null)decorator.decorat();System.out.println("装电脑");}public Computer() {}public Computer(Decorator decorator) {this.decorator=decorator;}}

2、测试类:

package com.pat.decorator;

public class Test {
	public static void main(String[] args) {
		Sofa sofa = new Sofa();
                Desk desk = new Desk(sofa);
		Computer com = new Computer(desk);
		com.decorat();
	}
}


Mac用户看过来!M1/M2芯片安装CiteSpace完整指南(从Homebrew到成功运行) 本文为Mac M1/M2芯片用户提供CiteSpace安装的完整指南,从Homebrew安装适配的Java环境到最终成功运行CiteSpace。详细步骤包括环境检查、Java配置、CiteSpace下载与优化,解决常见问题如内存分配、图形渲染和中文显示乱码,确保科研人员能顺利使用这一文献可视化工具。 阅读详情

相关推荐

python编程实现制作网络流量监控动画

c,实时显示网络带宽使用情况,用柱状图或折线图表示不同时间段的流量变化。通过 Python编程实现图形库(如 Pygame、Tkinter、Matplotlib 等)来实现计算机网络基础概念的可视化动画。global bars # 声明 bars 为全局变量。# 获取当前网络流量。# 创建图形和坐标轴。

qq_42788199的博客 718

working directory设置及不同选项区别

编码过程中会看到如下代码 System.getProperty(“user.dir”) user.dir为JVM启动时通过执行本地方法自动初始化的参数,表示用户当前工作目录(路径)。 在多module下,应用idea执行相同代码获取的是父项目的目录还是模块的工作目录,在idea中可通过编辑configurations进行指定。 不同工作目录含义 为空时:根项目目录 MODULE_DIR:模块目录 MODULE_WORKING_DIR:模块工作目录 MAVEN_REPOSITORY:maven仓库目录 KO

A_xiaopihai的博客 3016

保姆级教程:在RK3588开发板上用MPP库实现H.264硬编码(附完整代码)

本文详细介绍了在RK3588开发板上使用MPP库实现H.264硬编码的全流程,包括环境准备、MPP库编译、编码器初始化与配置、数据输入与编码流程以及高级性能优化技巧。通过实战案例和完整代码,帮助开发者充分利用RK3588的VPU硬件加速能力,提升视频编码效率和质量。

weixin_28716769的博客 414

IDEA更改默认的Working directory(工作目录)

 继上篇博客,解决了运行程序找不到工作目录的问题,可当运行下一个新的程序的时候,依然报同样的错误…查了下资料,更改Working directory分成两个部分,一个是当前应用的,一个是默认的(ε=(´ο`*)))唉,吃了英语不好的亏,IDEA是纯英的,好多设置都要查资料)  下面说下如何更改默认的Working directory,也就是工作目录  第一步、找到上方菜单栏的Run选项并打开,选择...

自知者明,知人者智 3万+

基础矩阵、本质矩阵、单应矩阵

基础矩阵是一个 3×3 的秩为2的矩阵,用于描述两个不同视图(或称为图像)之间对应点的几何约束。更具体地说,如果你有两幅图像,分别从两个不同的相机或者相机位置拍摄,那么基础矩阵可以用于找到一个图像中的点在另一个图像中的对应点。本质矩阵也是一个 3×3 的秩为2的矩阵,与基础矩阵非常类似。当两个视图(图像)之间的场景是一个平面或者两个视图之间仅有旋转和平移时,可以使用单应矩阵来关联这两个视图。这三个矩阵都是在计算机视觉中广泛应用的基础工具,但它们适用于不同类型的视图和场景。给定两个图像中的一对对应点。

Gloamirror的博客 1328

DEM数据下载,拼接,裁剪

目录: 1、数字高程模型(DEM)的数据下载 2、在ENVI里面进行拼接,生成SARscape标准格式的DEM数据3、在ArcGIS里面安装已有的矢量范文,进行掩膜裁剪 4、注意事项 数字高程模型的数据下载: 网址:http://dwtkns.com/srtm30m/ 1.对研究区域进行经纬度选择,然后进行选择下载即可 2.下载的数据是.hgt格式的,按照不同的需求进行转换,这里我是用于ENVI处理,且下载了四个,所有进行了拼接,拼接、格式转换如下 注:可能有时候需要登陆注册,点击下...

weixin_40874151的博客 2万+

%MODULE_WORKING_DIR%' does not exist

报错: Cannot start process, the working directory 'E:\ch\lucene-project\%MODULE_WORKING_DIR%'' does not exist 解决办法: 调整Junit的相关配置: 将Working directory的值改成“.”(点)即可 ...

Dack的博客 1493

Proteus仿真实战:ADC0832时序解析与51单片机精准电压采集

本文详细解析了ADC0832模数转换芯片在Proteus仿真环境中的时序控制与51单片机驱动实现。通过实战代码示例和精度优化技巧,帮助开发者掌握电压采集的关键技术,包括时序配置、数据校验和噪声抑制等核心要点,提升嵌入式系统设计的精准度与可靠性。

weixin_29172963的博客 873

idea 使用相对路径报错:FileNotFoundException

idea默认工作环境目录是当前项目,可以通过Run-->editconfigurations-->working directory配置 $MODULE_WORKING_DIR$命令可以自动定位到当前项目目录。 注意当项目有不同模块(即对应根目录下的子文件夹)时,使用"src\\name.dat"相对路径保存时还是会报错,要用"modulename\\src\\name.dat"。 ...

qq_52612346的博客 3891

cmu15445 2023fall project4 详细过程(包括Bonus Tasks) Concurrency Control

CMU15-445 23fall project 4详解

LA的博客 1604

18|AI 辅助精准测试:让平台会解释、会总结、会推荐

本文介绍 AI 在精准测试平台中的落地方式,包括变更摘要、风险解释、补测建议和报告总结。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。从报告中提取变更文件、未覆盖行、推荐用例。拼成结构化 JSON。让 AI 生成 200 字质量摘要。把摘要展示在报告顶部。读完本文后,可以复制下面的 Prompt,让 AI 生成一个报告总结练习。你是一名 AI 应用开发专家和测试架构师。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 55

JUnit单元测试%MODULE_WORKING_DIR%' does not exist

【Idea】JUnit单元测试%MODULE_WORKING_DIR%’ does not exist 2018年05月17日 09:49:42 the_fool_ 阅读数:3036 Idea执行单元测试时报错: 上午9:35 Error running ‘MobileMessageImplTest.java’: Cannot start process, the working director...

remzhang的博客 742

手把手教你学Simulink--基础微电网场景实例:基于Simulink的混合交直流微电网架构仿真

本文基于Simulink构建混合交直流微电网仿真模型,通过交流子网(风电+交流负荷)和直流子网(光伏+储能+直流负荷)的协同控制,实现系统效率提升8.5%。重点介绍了混合架构原理、下垂控制策略及Simulink建模方法,包括核心模块实现、协调控制器代码和仿真参数设置。通过三种工况测试验证了系统性能:功率转移响应时间<0.5s,电压波动<5%,显著优于传统独立子网架构。文章还提供了进阶优化方向和完整代码清单,为微电网仿真研究提供实用参考。

MHD0815的博客 129

设计模式-装饰模式-decorator_pattern

装饰者同实际对象有相同的接口,并持有一个指向实际对象的引用,在调用实际对象的方法前后,可以执行额外的功能。在需要动态扩展功能时,装饰模式是一种有效的设计模式,但应该谨慎使用,避免上述问题的出现。装饰模式通过将对象包装在装饰者类中来动态地添加功能,这使得装饰者可以与原始对象无缝集成,同时保持高度的灵活性和可扩展性。在需要遵循开闭原则(对扩展开放,对修改关闭)的场景中,装饰模式允许在不修改现有代码的基础上扩展功能。在应用程序中,可以使用装饰模式为方法添加性能监测功能,以统计方法的执行时间。

wesigj的博客 1791

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

设计模式之七—装饰模式(Decorator Pattern)

装饰模式是一种结构型设计模式,它动态地将责任附加到对象上。装饰模式提供了比继承更有弹性的替代方案,用于扩展对象的功能。装饰模式提供了一种灵活的替代继承的方式,通过组合对象来扩展功能。需要动态、透明地给对象添加职责需要避免使用继承导致的类爆炸问题需要遵循开闭原则,在不修改现有代码的情况下扩展功能在Java中,装饰模式被广泛应用于I/O流处理、GUI组件装饰等场景。正确使用装饰模式可以提高代码的灵活性和可维护性,但也需要注意避免过度使用导致的系统复杂性增加。

技术交流,一起进步 677

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【c++设计模式12】结构型4:装饰模式(Decorator Pattern)

装饰模式(Decorator Pattern)是一种结构型设计模式,它允许你在不改变现有对象结构的情况下,动态地将责任(功能)附加到对象上。装饰模式通过以透明的方式扩展对象的功能,比继承更灵活。

junxuezheng的博客 1021

VC中sqlite的使用

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

【C#设计模式】8.装饰模式(Decorator Pattern)【结构型】

1.1 动机(Motivate) 在房子装修的过程中,各种功能可以相互组合,来增加房子的功用。类似的,如果我们在软件系统中,要给某个类型或者对象增加功能,如果使用“继承”的方案来写代码,就会出现子类暴涨的情况。比如:IMarbleStyle是大理石风格的一个功能,IKeepWarm是保温的一个接口定义,IHouseSecurity是房子安全的一个接口,就三个接口来说,House是我们房子,我们的房子要什么功能就实现什么接口,如果房子要的是复合功能,接口不同的组合就有不同的结果,这样就导致我们子类膨胀严重,.

星Yeah 的博客 2895

C++设计模式——装饰模式(Decorator Pattern)

C++设计模式——装饰模式(Decorator Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——装饰模式(Decorator Pattern)目录定义代码示例总结装饰模式和代理模式适用场景优缺点装饰模式的简化参考资料 定义 Attach additional responsibilities to an object dynamically keeping the same interface. Decorators provide a flexible alternati

leonardohaig的博客 1180

JAVA设计模式之 装饰模式【Decorator Pattern】

一、概述 动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。装饰模式是一种用于替代继承的技术,使用对象之间的关联关系取代类之间的继承关系。在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有类的功能。二、适用场景 装饰原有对象、在不改变原有对象的情况下扩展增强新功能/新特征.。当不能

小吕丶Code阶区 3369

装饰模式(Decorator Pattern)

装饰模式(Decorator Pattern)是一种结构型设计模式,它允许通过将对象包装在装饰器类的实例中来动态地添加新的行为和责任。这种模式可以在不修改现有代码的情况下,灵活地扩展对象的功能。

weixin_40026739的博客 1347

设计模式:装饰模式(Decorator Pattern)

装饰模式(Decorator Pattern) 是一种结构型设计模式,它的核心思想是:在不修改原有类代码的前提下,动态地给对象添加新的功能。它通过对象组合而不是继承,来实现功能扩展。这样既能保持类的简洁性,又能在运行时灵活地扩展功能。

TechNomad的博客 1184

Java设计模式——装饰模式(Decorator Pattern)

57524ds5gds

阿Q的小窝 706

Java设计模式 十 装饰模式 (Decorator Pattern)

抽象组件定义通用接口,表示所有文本处理组件的公共行为。

空 1135

设计模式——装饰模式(Decorator Pattern)

装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为,装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系。在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有类的功能。装饰模式定义如下:装饰模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。

ddm 1598

D9:C#设计模式之八装饰模式(Decorator Pattern)【结构型】

一、引言 今天我们要讲【结构型】设计模式的第三个模式,该模式是【装饰模式】,英文名称:Decorator Pattern。我第一次看到这个名称想到的是另外一个词语“装修”,我就说说我对“装修”的理解吧,大家一定要看清楚,是“装修”,不是“装饰”。我们长大了,就要结婚,要结婚就涉及到要买房子,买的精装修或者简单装修就可以住的,暂时不谈。我们就谈谈我们购买的是毛坯房。如果我想要房子的内饰是大理石...

. 504

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

装饰模式(Decorator Pattern)是一种结构型设计模式,通过动态包装对象扩展功能,避免继承带来的类爆炸问题。其核心是组合替代继承,在不修改原对象的情况下分层添加职责(如为照片加相框或煎饼加配料)。该模式包含抽象组件、具体组件、抽象装饰器和具体装饰器四个角色,通过嵌套实现功能叠加(如Java的BufferedInputStream包装FileInputStream)。 优点包括动态扩展、解耦代码和透明性,缺点是可能增加类数量和调试难度。适用于日志增强、多级缓存、IO流处理等场景,遵循开闭原则但需权

csdn_tom_168的博客 937
上一篇: 【Shell学习笔记3》实践项目自动部署脚本】shell中获取返回值、获取当前sh文件路径
下一篇: 【设计模式】结构型03外观模式(Facade Pattern)
「已注销」
博客等级 码龄11年 199粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值