结构型模式-装饰器模式

ops/2024/11/29 16:57:30/

装饰者模式(Decorator Pattern)是一种结构型设计模式,主要用于动态地给对象添加一些额外的职责,而无需修改其代码。通过将对象放入包含行为的装饰器对象中,能够有效地扩展功能,同时保持原始类的结构和代码完整性。

装饰者模式的核心要点

  • 开放/封闭原则:在不修改原始类代码的情况下扩展功能。
  • 动态扩展:相比继承,装饰者模式更灵活,可以在运行时选择装饰器来增强对象功能。
  • 面向接口:装饰者和被装饰对象共享一个公共的接口。

结构

  • 组件(Component):定义一个抽象接口,供具体的组件和装饰器实现。
  • 具体组件(ConcreteComponent):实现组件接口,是被装饰的原始对象。
  • 装饰器(Decorator):实现组件接口,并包含一个对组件对象的引用,用于在其基础上增强功能。
  • 具体装饰器(ConcreteDecorator):扩展装饰器功能,提供具体的附加行为。

Java实现示例

//抽象组件接口:
public interface Component {void operation();
}
//具体组件
public class ConcreteComponent implements Component {@Overridepublic void operation() {System.out.println("基础操作");}
}
//抽象装饰器
public abstract class Decorator implements Component {protected Component component;public Decorator(Component component) {this.component = component;}@Overridepublic void operation() {component.operation();}
}
//具体装饰器A和B
public class ConcreteDecoratorA extends Decorator {public ConcreteDecoratorA(Component component) {super(component);}@Overridepublic void operation() {super.operation();System.out.println("装饰器A的增强操作");}
}public class ConcreteDecoratorB extends Decorator {public ConcreteDecoratorB(Component component) {super(component);}@Overridepublic void operation() {super.operation();System.out.println("装饰器B的增强操作");}
}
//测试代码
public class Main {public static void main(String[] args) {// 创建基础组件Component component = new ConcreteComponent();// 使用装饰器A增强Component decoratorA = new ConcreteDecoratorA(component);// 使用装饰器B增强Component decoratorB = new ConcreteDecoratorB(decoratorA);// 执行最终操作decoratorB.operation();}
}

适用场景

  • 需要动态扩展一个类的功能。
  • 不希望通过继承增加类的数量。
  • 需要以不同组合方式增强对象的功能。

相比继承,装饰者模式更灵活,适合功能扩展需求频繁变动的场景,比如日志记录、权限校验等功能的实现。


http://www.ppmy.cn/ops/137689.html

相关文章

从单机缓存到分布式缓存那些事

作者:秦怀 1 缓存前世今生 1.1 故事从硬件开始 Cache 一词来源于 1967 年的一篇电子工程期刊论文。其作者将法语词“cache”赋予“safekeeping storage”的涵义,用于电脑工程领域。当时没有 Cache,CPU 和内存都很慢,CPU 直接访…

【超详细】卷积神经网络CNN基本架构以及工作原理详解

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

限制账号密码格式的正则表达式来啦

. 代表任意字符 \w 代表字母、数字、下划线 \d 代表数字 指定字符重复1次或者n次,最少1次 ? 指定字符重复0-1次 {n} 只能重复n次 {a,} 最少重复a次 {,a} 最多重复a次 {a,b} 最少重复a次,最多重复b次 \s 空格 | 代表或者 [a-zA-Z0-9]&#xf…

Fanuc法那科机器人维修之参考位置详解

参考位置是预先设定好的一个或多个特定点位,当启用这一功能时,系统会实时且精确地判断机器人的当前关节角度是否处于预设参考位置的一定范围之内(这个范围区间是可以根据实际需求进行设置的),并据此输出指定的信号。 这…

【设计模式】【结构型模式(Structural Patterns)】之外观模式(Facade Pattern)

1. 设计模式原理说明 外观模式(Facade Pattern) 是一种结构型设计模式,它提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。通过隐藏子系统的复杂…

【FPGA】UART串口通信

文章目录 一、通信方式1.串行通信2.并行通信 二、UART串口通信1.模块设计与时序图2.代码实现 三、测试结果1.仿真结果2.上板验证 一、通信方式 1.串行通信 串行通信是指利用一条传输线将数据一位位地顺序传送。(也就是说串行通信传输的数据是1比特1比特的传送的&a…

【closerAI ComfyUI】物体转移术之AI模特换装,Flux三重控制万物一致性生图,赋能电商产品行业,小白两步完成!

更多AI前沿科技资讯,请关注我们: closerAIGC closerAI,一个深入探索前沿人工智能与AIGC领域的资讯平台,我们旨在让AIGC渗入我们的工作与生活中,让我们一起探索AIGC的无限可能性!closerAI-一个深入探索前沿人工智能与AIGC领域的资讯平台 产品经理逛世界 一只在互联网PM浪…

Qt程序发布及打包成exe安装包

参考:Qt之程序发布以及打包成exe安装包 目录 一、简述 Qt 项目开发完成之后,需要打包发布程序,而因为用户电脑上没有 Qt 配置环境,所以需要将 release 生成的 exe 文件和所依赖的 dll 文件复制到一个文件夹中,然后再用 Inno Setup 打包工具打包成一个 exe 安装包,就可以…