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

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

什么是装饰者模式

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

装饰者模式应用场景

过滤器,网关控制,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办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

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 验