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

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

什么是装饰者模式

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

装饰者模式应用场景

过滤器,网关控制,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使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财

Python装饰器之类装饰器详解

《Python装饰器之类装饰器详解》本文将详细介绍Python中类装饰器的概念、使用方法以及应用场景,并通过一个综合详细的例子展示如何使用类装饰器,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. 引言2. 装饰器的基本概念2.1. 函数装饰器复习2.2 类装饰器的定义和使用3. 类装饰

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