”万丈高楼平地起“——如何从“建筑师”角度打造【装饰者设计模式】

本文主要是介绍”万丈高楼平地起“——如何从“建筑师”角度打造【装饰者设计模式】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是装饰者模式

不改变原有对象的基础上附加功能,相比生成子类更灵活。

装饰者模式应用场景

过滤器,网关控制,P2P分控审批

装饰者模式类图

装饰者模式定义

(1)抽象组件:定义一个抽象接口,来规范准备附加功能的类

(2)具体组件:将要被附加功能的类,实现抽象构件角色接口

(3)抽象装饰者:持有对具体构件角色的引用并定义与抽象构件角色一致的接口

(4)具体装饰:实现抽象装饰者角色,负责对具体构件添加额外功能。

装饰者代码实现

定义一个抽象的接口

/*** 定义【抽象构建角色】:GatewayComponent* GatewayComponent:相当与建筑师设计好高楼的建造目标*/
public abstract class GatewayComponent {/*** 定义共同行为的方法标准*/public abstract void service();}

定义被装饰角色

/*** 【网关获取基本参数】,BasicComponentGateway【被装饰的类】* BasicComponentGateway:相当于建房子的【地基】*/
public class BasicComponentGateway extends GatewayComponent {public void service() {System.out.println("第一步>>> 网关中获取基本的操作实现...");}
}

定义抽象装饰角色

/*** 抽象装饰者:AbstractDecorator,定义【被装饰者】与【具体装饰者】共同行为* AbstractDecorator:相当于工人怎么去建好每一层楼*/
public class AbstractDecorator extends GatewayComponent {public GatewayComponent gatewayComponent;public AbstractDecorator(GatewayComponent gatewayComponent){this.gatewayComponent = gatewayComponent;}public void service() {if(gatewayComponent!=null){gatewayComponent.service();}}
}

定义具体装饰角色

/*** 网关新增日志收集LogDecorator,【装饰者】* LogDecorator:相当于地基之上搭建第一层*/
public class LogDecorator extends AbstractDecorator {public LogDecorator(GatewayComponent gatewayComponent) {super(gatewayComponent);}@Overridepublic void service() {super.service();System.out.println("第二步>>> 网关中新增日志收集..");}
}/*** 网关新增API接口限流具体操作【装饰者】* ApiLimitDecorator:相当于在第第一层楼上建造第二层*/
public class ApiLimitDecorator extends AbstractDecorator {public ApiLimitDecorator(GatewayComponent gatewayComponent) {super(gatewayComponent);}@Overridepublic void service() {super.service();System.out.println("第三步>>> 网关中新增API接口的限流...");}
}

获取装饰类

public class FactoryGateway {public static GatewayComponent getGatewayComponent() {//第二层->第一层->地基return new ApiLimitDecorator(new LogDecorator(new BasicComponentGateway()));}public static void main(String[] args) {GatewayComponent gatewayComponent = FactoryGateway.getGatewayComponent();//地基->第一层->第二层gatewayComponent.service();}
}

输出结果

版权@须臾之余https://my.oschina.net/u/3995125

第一步>>> 网关中获取基本的操作实现...
第二步>>> 网关中新增日志收集..
第三步>>> 网关中新增API接口的限流...

源码角度分析装饰者模式

Java I/O 中的装饰者模式

Spring Session 中的装饰者模式

Mybatis 缓存中的装饰者模式

Java I/O 中的装饰者模式

它基于字节流(InputStream/OutputStream) 和 字符流(Reader/Writer)作为基类,下面画出InputStream、Reader的抽象构造角色   Reader,FilterReader  抽象的装饰类

责任链与装饰模式区别

责任链实现原理

每个被调用者 都持有下一个 被调用者 的引用,客户端只需要发起一次调用即可。

装饰的实现原理

持有被装饰的对象,并具备被装饰者 的行为,对其行为进行补充增强

两者区别

责任链模式原理:通过指向下一个handler的方法,顺序依据链表执行,指向下一个节点(正向流程)

装饰者模式原理:通过super执行具体被装饰类,再反向从装饰类开始执行(反向流程)

知识分享

本文参考:蚂蚁课堂

这篇关于”万丈高楼平地起“——如何从“建筑师”角度打造【装饰者设计模式】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/192162

相关文章

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

基于Python打造一个全能文本处理工具

《基于Python打造一个全能文本处理工具》:本文主要介绍一个基于Python+Tkinter开发的全功能本地化文本处理工具,它不仅具备基础的格式转换功能,更集成了中文特色处理等实用功能,有需要的... 目录1. 概述:当文本处理遇上python图形界面2. 功能全景图:六大核心模块解析3.运行效果4. 相

Python从零打造高安全密码管理器

《Python从零打造高安全密码管理器》在数字化时代,每人平均需要管理近百个账号密码,本文将带大家深入剖析一个基于Python的高安全性密码管理器实现方案,感兴趣的小伙伴可以参考一下... 目录一、前言:为什么我们需要专属密码管理器二、系统架构设计2.1 安全加密体系2.2 密码强度策略三、核心功能实现详解

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

用Java打造简易计算器的实现步骤

《用Java打造简易计算器的实现步骤》:本文主要介绍如何设计和实现一个简单的Java命令行计算器程序,该程序能够执行基本的数学运算(加、减、乘、除),文中通过代码介绍的非常详细,需要的朋友可以参考... 目录目标:一、项目概述与功能规划二、代码实现步骤三、测试与优化四、总结与收获总结目标:简单计算器,设计

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

设计模式之工厂模式(通俗易懂--代码辅助理解【Java版】)

文章目录 1、工厂模式概述1)特点:2)主要角色:3)工作流程:4)优点5)缺点6)适用场景 2、简单工厂模式(静态工厂模式)1) 在简单工厂模式中,有三个主要角色:2) 简单工厂模式的优点包括:3) 简单工厂模式也有一些限制和考虑因素:4) 简单工厂模式适用场景:5) 简单工厂UML类图:6) 代码示例: 3、工厂方法模式1) 在工厂方法模式中,有4个主要角色:2) 工厂方法模式的工作流程