设计模式之七 装饰者模式

数字IC后端设计实现OCC(On-chip Clock Controller)电路介绍及时钟树综合案例 阅读详情

Hello...晚上让我讲讲装饰者模式吧..

装饰者模式,顾名思义,就是装饰.打个粗俗的比方,就是穿衣服...你穿了一件风衣,也穿了一件羊毛衫,通过这2个东西来装饰你自己...

首先来个理论吧.

装饰模式又叫做包装模式,可以以对客户端透明的方式扩展对象的功能,即客户端并不会觉得对象在装饰前和装饰后有什么不同。

在装饰模式中的角色有:

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

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

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

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

看下UMl图



好了,看看我们刚才举得穿衣服的例子

看下UML图


看下代码

package edu.fjnu.cs.hwb.wrapperpattern.test;

public interface Wear
{
	void say();
}
package edu.fjnu.cs.hwb.wrapperpattern.test;

public class People implements Wear
{
	public void say()
	{
		System.out.println("我穿的是短袖");
	}
}
package edu.fjnu.cs.hwb.wrapperpattern.test;

public class People implements Wear
{
	public void say()
	{
		System.out.println("我穿的是短袖");
	}
}
package edu.fjnu.cs.hwb.wrapperpattern.test;

public class WindCoat extends Clothes
{
	Wear wear;
	public WindCoat(Wear wear)
	{
		this.wear = wear;
	}
	public void say()
	{
		System.out.println("我穿的是风衣");
		wear.say();
	}
}
package edu.fjnu.cs.hwb.wrapperpattern.test;

public class WoollenSweater extends Clothes
{
	Wear wear;
	public WoollenSweater(Wear wear)
	{
		this.wear = wear;
	}
	public void say()
	{
		System.out.println("我穿的是羊毛衫");
		wear.say();
	}
}
看下客户端的使用方式

package edu.fjnu.cs.hwb.wrapperpattern.test;

public class Client
{
	public static void main(String[] args)
	{
		Wear p  = new People();
		p.say();
		System.out.println();
		
		p = new WoollenSweater(p);
		p.say();
		System.out.println();
		p = new WindCoat(p);
		p.say();
		
		System.out.println();
		Wear wear = new WindCoat(new WoollenSweater(new People())); //和上面的最终效果是一样的.
		//可以看出来,最终装饰的是People,他本来只是穿短袖的,但是经过了装饰之后,他穿上了羊毛衫和风衣!
		wear.say();
	}
}
结果




如果有错误,希望指出!


假新闻检测论文分享(17)CAFE(Cross-modal Ambiguity Learning for Multimodal Fake NewsDetection) 本文首先从信息论的角度对跨模态歧义性学习问题进行形式化描述,利用不同单模态特征之间的分布散度量化其歧义性;然后,提出了一种模糊度感知的多模态假新闻检测方法CAFE。CAFE通过自适应地聚合单模态特征和跨模态关联,即在跨模态歧义性较弱时依赖单模态特征,在跨模态歧义性较强时参考跨模态关联,从而提高假新闻检测精度。提出了跨模态歧义学习问题,这是多模态假新闻检测的一个关键挑战,并提出了一种基于KL散度的方法,通过估计其特征分布的散度来量化文本和图像之间的歧义。 阅读详情

相关推荐

手动以及使用torch.nn实现前馈神经网络实验

手动以及使用torch.nn实现前馈神经网络 手动实现前馈神经网络解决上述回归、二分类、多分类任务 利用torch.nn解决上述回归、二分类、多分类任务 在多分类任务中使用至少三种不同的激活函数 对多分类任务中的模型评估隐藏层层数和隐藏单元个数对实验结果的影响

m0_52910424的博客 9372

设计模式(七)装饰模式

装饰模式是结构型设计模式之一,不必改变类文件和使用继承的情况下,动态地扩展一个对象的功能,是继承的替代方案之一。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

Android进阶三部曲 - 刘望舒 5058

HEC-HMS水文建模从入门到精通:手把手教你安装与配置(附常见问题解决)

本文详细指导HEC-HMS水文建模软件的安装与配置,重点解析了基于InstallShield Wizard的安装流程,并提供了针对常见错误代码(如-6003)的解决方案。旨在帮助水文、水利领域从业者快速搭建稳定的建模环境,为后续流域模拟与洪水预报奠定基础。

weixin_29213827的博客 496

设计模式(七)之装饰模式

装饰器模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。 下图为其结构图: 四个主要角色分别为: 抽象构件(Component)角色:给出一个抽象接口,以规范准备接受附加责任的对象。 具体构件(ConCreteComponent)角色:定义一个将要接受附加责任的类。 装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口...

camellia的博客 278

【VisionMaster】图像源模块之本地图像

图像采集之图像源

zhy29563 6961

Mplus—随机截距交叉滞后模型(Random Intercepts Cross-Lagged Panel Model, RI-CLPM)

介绍随机截距交叉滞后模型(Random Intercepts Cross-Lagged Panel Model, RI-CLPM)的相关知识,例如模型内容、Mplus语法及对应网址等。

m0_54401011的博客 9534

设计模式《七》——装饰模式

简介 顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。 角色与职责 Component:抽象接口,可以给这些对象动态地增加职责。 ConcreteComponent:Component的具体对象,也可以对这个对象添加一下职责。 Decorator:装饰抽闲类,继承自Component,从Decora...

草根工厂——技术虐我千百遍,我依然待你如初恋 240

RV1126上YOLOv8部署实战:从模型转换到板端推理的完整避坑指南

本文提供了在瑞芯微RV1126芯片上部署YOLOv8目标识别算法的完整实战指南。内容涵盖从模型转换、环境搭建到板端推理代码编写的全流程,重点解析了RKNN-Toolkit使用、量化配置、内存优化及后处理实现等关键环节的常见问题与解决方案,旨在帮助开发者高效避坑,实现边缘AI应用的稳定落地。

pz89012345的博客 568

设计模式七:装饰模式

一、什么是装饰模式 装饰(Decorator)模式又叫做包装模式,是结构型模式之一。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案 二、装饰模式的特点 可以层层装饰,十分方便使用。io流使用的最多。 三、装饰模式的角色和职责 抽象组件角色:一个抽象接口,是被装饰类和装饰类的父接口 具体组件角色:为抽象组件的实现类 抽象装饰角色:包含一个组件的引用,并...

神韵 266

【TELEMAC V8P4】TELEMAC-2D 用户手册核心概念与应用场景速览

本文深入解析了TELEMAC-2D水动力模型的核心概念与应用。作为基于二维浅水方程的开源数值模拟工具,TELEMAC-2D广泛应用于河流动力学、洪水演进、污染物输运及泥沙运动模拟。文章结合用户手册与实战经验,详细拆解了其理论框架、关键物理过程(如湍流模型、干湿网格处理),并提供了从模型搭建、文件配置到典型场景(如工程评估、污染应急、洪水模拟)的实用指南,帮助用户快速掌握这一强大工具。

weixin_29200741的博客 163

FPGA原型验证(八):SoC设计适配与实现策略

时钟门控在SoC设计中很常见,应该小心处理门控时钟,以成功地在FPGA上原型化SoC设计。现代FPGA综合工具在正确约束的情况下,可以自动处理大多数门控时钟。通过遵循本章中的指导方针,即使具有复杂时钟门控的SoC设计也可以得到处理,并成功地在FPGA上进行原型化。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 477

java设计模式之装饰者设计模式(七)

1.装饰者设计模式 1.1 装饰者模式定义 装饰者模式: 动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性, 装饰者模式也体现了开闭原则(ocp) 这里提到的动态的将新功能附加到对象和 ocp 原则,在后面的应用实例上会以代码的形式体现,请同学们注意 体会。 1.2 装饰者模式原理 装饰者模式就像打包一个快递 主体:比如:陶瓷、衣服 (Component) // 被装饰者 包...

yijian941215的博客 172

YOLO26涨点改进| TGRS 2026 | 独家创新首发、注意力改进篇| 引入CSSCA频谱-空间交叉注意力,含多种创新改进,小目标检测、图像分割、高光谱图像分类、语义分割任务任务涨点

🔥本文提出CSSCA(频谱-空间交叉注意力)模块,通过中心像素引导的光谱与空间交叉注意力机制,有效提升YOLO26模型的特征表达能力。该模块实现了光谱与空间信息的协同优化,能够自适应强化关键通道与重要空间区域,增强模型对小目标和复杂场景的感知能力。文章详细介绍了CSSCA的网络结构、工作原理及四大优势,包括精准特征表达、协同信息优化、小样本适应性和轻量化设计。同时提供了完整的代码实现和四种改进方案的YAML配置文件,包括基础版、增强版、C3k2融合版和C2PSA融合版,为YOLO26模型的性能提升

Ai缝合怪、助力小伙伴高效发论文 268

设计模式(七)装饰者模式

一.定义与类型 1.定义:在不改变原有对象的基础之上,将功能附加到对象上 提供了比继承更有弹性的替代方案(扩展原有对象功能) 2.类型:结构型 二.适用场景 1.扩展一个类的功能或给一个类添加附加职责 2.动态的给一个对象添加功能,这些功能可以再动态的撤销 三.优点 1.继承的有力补充,比继承灵活,不改变原有对象的情况下给一个对象扩展功能 2.通过使用不同装饰类以及这些装饰类的排列组合,可以实现不同效果 3.符合开闭原则 四.缺点 1.会出现更多的代码,更多的类,增加程序复杂性 2

瑺圊樹的专栏 157

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

STM32F407中文手册

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

Java设计模式解析之七——装饰模式

装饰模式1.前言2.特点2.1.代码说明2.2.优缺点2.2.使用场景3.总结 1.前言 设计模式共有23种,根据目的准则分类,分为三类 创建型设计模式,共5种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 结构型设计模式,共7中:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、响元模式。 行为设计模式,共11种:策略模式、模版方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 这里介绍一下装饰模式。

fanhenghao的博客 196

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

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

技术交流,一起进步 677

设计模式笔记七 装饰者模式

星巴克咖啡订单项目(咖啡馆): 咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡) 调料:Milk、Soy(豆浆)、Chocolate 要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便 使用 OO 的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖啡+调料组合。 方案 1-解决星巴克咖啡...

笨鸟先飞 174

七、设计模式之装饰者模式(创建型)

八、装饰者模式(创建型) 装饰者模式概述 装饰( Decorator )模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。他是23种设计模式之一,英文叫Decorator Pattern,又叫装饰者模式。装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 为什么要使用装饰模式 多...

William 229

AspectJ实现设计模式(七)—装饰模式

本文介绍使用AspectJ实现设计模式之装饰模式,文章利用一个打印发票的例子说明如何使用AspectJ来实现装饰模式。 示例说明       装饰模式是大家都很熟悉的一个模式,最典型的例子就是Java的I/O库,它的设计完全按照装饰模式。我们通常在客户端使用new操作符来对一个类进行包装,例如下述代码DataOutputStream out=new DataOutputStream

starchu1981的专栏 1475

【设计模式】【七】装饰模式

1.装饰模式简介装饰模式介绍装饰模式是结构型设计模式之一,不必改变类文件和使用继承的情况下,动态地扩展一个对象的功能,是继承的替代方案之一。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。定义动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。装饰模式结构图 Component:抽象组件,给对象动态的添加职责。 ConcreteComponent:组件具体实现类。

帅胖子的博客 662

设计模式之装饰者模式(七)

设计模式之装饰者模式(七)

weixin_45734473的博客 446

设计模式专题(七)装饰器模式

目录 定义 装饰器模式的结构 示例代码 定义 装饰器模式又名包装(Wrapper)模式。装饰器模式以对客户端透明的方式拓展对象的功能,是继承关系的一种替代方案。 装饰器模式的结构 装饰器模式以对客户透明的方式动态的给一个对象附加上更多的责任。换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰器模式可以在不是用创造更多子类的情况下,将对象的功能加以拓展。 装饰器模式的类图如下: 装饰器模式的类图 在装饰器模式中的角色有: 抽象构件(Component)角色:给出一个抽象接口

ThinkMore 761

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

1、什么是装饰器模式? Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclassing for extending functionality. 装饰器模式(Decorator Pattern):动态的给一个对象添加额外的职责,就增加功能来说, 装饰模式相比生成子类更为灵活。 说人话

IT可乐 481

Java设计模式(七)之装饰者模式

装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。 Source类是被装饰类,Decorator类是一个装饰类,可以为Source类动态的添加一些功能,代码如下: public interface Sourceable { public void method(); } public class Source implements Sourceable { @Override public void method() {

weixin_42975911的博客 169

设计模式学习(七)装饰者模式

目录装饰者模式前言基本介绍具体案例实现装饰者模式总结 装饰者模式 前言 通过一个案例来解释为什么要用装饰模式 要完成这个案例的方法有很多种,传统方式是这样解决的: 根据上面一个方案的问题,提出了一个更好一点的方案: 但是方案二还是有问题,在增加和删除调料的时候,代码的维护量还是很多。 所以就是用装饰者模式去解决这一案例 基本介绍 装饰者模式: 动态的 将新功能 附加到对象上 。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则 这里提到的动态的将新功能附加到对象 和

qq_41816516的博客 264
上一篇: GitHub 之 the authenticity of host ... can't be established
下一篇: LeetCode|Search a 2D Matrix
hwb1992
博客等级 码龄14年 4粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值