设计模式及其在项目、框架中的应用

设计模式的作用:

1、类之间关系图,明确的角色及其关系、作用;

2、符合开闭原则,职责明确,并且开放的拓展点可以有效应对后期的变化。

(一)、责任链模式

适用场景:
在一个流程中,对某一个对象有一串不同的业务处理操作,可以把这些业务操作封装成一个抽象业务的不同实现类,便于在链路中动态添加处理逻辑。

类图分析:

角色:请求者 处理者 处理者链路

举例:
1、快麦erp,订单进入系统后,需要进行一系列的后续处理动作:敏感信息加密、分配赠品、匹配仓库、物流方式、锁定库存,这些动作可以都抽象成对订单的操作,以链路的方式将这些动作串起来。

2、Sentinel的SlotChain

Sentinel是一个流控框架,对进来的请求进行统计、限流、权限控制、降级等处理,它也做成处理链的形式,方便添加新的处理逻辑。在这里,被处理者是资源ResourceWrapper,处理者是Slot,处理者链路是SlotChain,具体的Slot实现类有NodeSelectSlot、FlowSlot等。

详细的实现原理和代码实现分析: Sentinel流控实现原理+代码实现分析-CSDN博客

(二)、抽象工厂模式

适用场景:
需要根据"系列名称"等来获取一系列的对象实例,这些对象实例有一个聚合的业务含义,比如都属于鞋子加工过程中用到的设备。

类图分析:
角色:抽象工厂 工厂 抽象产品 产品

举例:
1、快麦erp,业务流程中需要与不同平台(淘宝、京东)交互,比如从不同平台下载订单,下载部分的代码包含平台接口请求以及转化为我们系统的订单实体的代码。
我们将这些与平台相关的业务逻辑代码提取出来,作为抽象接口,在业务代码中使用的时候以PlatformAccessManager.load(平台名,业务类.class)的形式加载。PlatformAccessManager就是抽象工厂,能够根据平台名返回该平台对应的操作类。
这里将操作类抽象出来的方式有模板模式的味道,只是具体的实现类不是模板的子类,而是类似策略模式里的策略类。

public class TradeDownloadService {

    public void downLoad(String platform, String tid) {
        DownloadBusiness downloadBusiness = PlatformAccessManager.load(platform, DownloadBusiness.class);
        downloadBusiness.download(tid);
    }
}


public interface DownloadBusiness {
    Trade download(String tid);
}

(三)、外观模式

适用场景:

封装内部的多个服务的功能,给外界提供一个统一的接口。

类图分析:

角色:对外接口 内部实现类

举例:

1、快麦erp,模块一Dubbo接口的形式暴露本模块的对外功能接口,这些接口的实现中包含对本模块的服务功能的整合。

(四)、观察者模式

适用场景:
事件的发布者与订阅者常常属于不同的业务模块、不同的处理线程,如何将这两者、这两个过程解耦,就是观察者模式实现的效果。一个发布者可以对应多个订阅者,一旦发布者发出通知,订阅者收到消息,便可做相应的消息处理。

类图分析:
角色: 主题 观察者 

举例:
1、消息队列
在分布式应用中,为了达到模块之间解耦、数据处理过程异步拆解的目的,常常会以消息的形式来触发过程执行,通知者和被通知者分别对应消息队列中的发布者和订阅者。

比如订单生成成功后,锁定库存需要同步进行,但是订单操作日志记录的工作实时性要求不高,可以通过消息队列的形式通知进行。

(五)、代理模式
适用场景:
要为一些过程增加统一的拦截处理,比如记录日志、权限验证,就可以使用代理模式。通过对实际对象的处理动作进行代理,就可以实现动作拦截、行为控制、增加统一动作的效果。

类图分析:
角色: 被代理接口 被代理类 代理类

举例:
1、拦截器实现权限过滤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/482490.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ArmSoM-Sige RK3588开发板产品简介

让我们在 5 分钟内了解 Sige7。 简介​ ArmSoM-Sige7采用Rockchip RK3588新一代旗舰级八核64位处理器,主频高达2.4GHz,6 TOPS算力NPU,最大可配32GB大内存。支持8K视频编解码,拥有丰富的接口,支持双2.5G网口、WiFi6 &…

Tomcat9.0.87闪退解决方案

运行Tomcat9.0.87闪退 报错:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program 原因:使用了免安装的方法,直接运行bin目录下的startup.ba…

unity学习(68)——相机/模型的旋转/位置计算

这个比想象中要难,而且需要自己写。 1.相机可以转xy两个位置,可以点头和转圈。注意这里有一个if判断(后面返回来发现了这些问题) 2.角色不能点头,只能转圈。 难得是移动方向,因为移动方向(位置)和转向是相…

无人机三维建模过程中注意事项

无人机三维建模是指利用无人机技术进行三维建模,该方法通过无人机搭载的多种传感器,如摄像头、激光扫描仪等,获取建筑物的多角度影像数据,然后利用计算机视觉技术和三维重建算法,将这些影像数据转化为高精度的三维模型…

Redis基础命令集详解

目录 1.Redis基础命令 2.Redis的经典案例 2.1 缓存 2.2 计数器 2.3 发布订阅 Redis是一个开源、内存存储的数据结构服务器,它支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等。在Redis中,使用一些基础的命令来操作这些数据结…

从零开始学习在VUE3中使用canvas(六):lineCap(线条端点样式)

一、简介 lineCap能够让我们设置线条的端点样式,例如 1. butt const ctx canvas.getContext("2d");ctx.lineCap "butt"; // 默认样式,也可以显式指定 2.round const ctx canvas.getContext("2d");//圆头ctx.lineCap …

BRAM底层原理详细解释(1)

目录 一、原语 二、端口简述 2.1 端口简介 2.2 SDP端口映射 三、端口信号含义补充说明 3.1 字节写使能(Byte-Write Enable)- WEA and WEBWE: 3.2 地址总线—ADDRARDADDR and ADDRBWRADDR 3.3 数据总线—DIADI, DIPADIP, DIBDI, and D…

SSL加密:保护数据传输的安全盾牌

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

是德科技keysight E5061B网络分析仪

181/2461/8938产品概述: Keysight(原Agilent) E5061B 是一款 ENA 系列网络分析仪,可以满足广泛的低频至高频电子元器件和电路测量需求。E5061B 现可提供新的 5 Hz 至 3 GHz 频域器件分析标准。 E5061B ENA系列网络分析仪从5Hz 至3GHz提供了广泛的频率范…

使用 ReclaiMe Pro 查找并恢复网络中的 SSH 服务器数据

天津鸿萌科贸发展有限公司是 ReclaiMe Pro 数据恢复软件的授权代理商。ReclaiMe Pro 数据恢复软件专注于恢复几乎所有文件系统及各种类型和复杂程度的 RAID 阵列。 在本文中,我们介绍 ReclaiMe Pro 对于采用 SSH 连接方式的网络服务器中数据的恢复方法。 ReclaiMe…

DataV 在HTML中使用

一:什么是DataV 介绍 | DataV (jiaminghi.com) 组件库基于Vue (React版 (opens new window)) ,主要用于构建大屏(全屏)数据展示页面即数据可视化,具有多种类型组件可供使用:…

「渗透笔记」致远OA A8 status.jsp 信息泄露POC批量验证

前言部分 在本节中,我会分两部分来说明致远OA A8 status.jsp 信息泄露的验证问题,其实就是两种验证方式吧,都一样,都是批量验证,主要如下所示: 通过Python脚本进行批量验证,但是前提是你可以收…

北航计算机软件技术基础课程作业笔记【1】

为白成刚老师的课程&#xff0c;简单做一个记录&#xff0c;内容偏基础&#xff0c;自己仅保留认为有用的部分 L1&#xff1a;算法概论 课程简单介绍了复杂度、算法的概念 1.作业 计算下列各片断程序中xx1的执行次数 (1) for (i1; i<n; i)for (j1; i<n; j)for (k1; …

C#进阶实践项目(俄罗斯方块)

CSharp进阶实践项目--俄罗斯方块 1.需求分析 2.复用贪吃蛇开始等场景切换的代码 &#xff08;自己写一遍&#xff0c;不难&#xff01;&#xff01;&#xff01;&#xff09; 入口&#xff1a; 更新接口&#xff1a; Game 类&#xff1a; BeginOrEndBaseScene 类&#xff1a;…

基于SSM的花店商城系统+数据库+论文+免费远程调试

项目介绍: 基于SSM的花店商城系统。Javaee项目 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMvc MybatisMavenJsp来实现。MySQL数据库作为系统数据储存平台&#xff0c;实…

【系统架构师】-系统配置与性能评价

1、计算机 硬件入手&#xff1a; 时钟频率(主频);运算速度、运算精度内存的存储容量;存储器的存取周期;数据处理速率PDR(processingdatarate)吞吐率;各种响应时间;各种利用率;RASIS特性(即:可靠性Reliability、可用性Availability、可维护性Sericeability、完整性和安全性Int…

内网渗透(一)必须了解Windows工作组

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、内网渗透测试简介 内网也叫局域网&#xff0c;是指在…

【MySql】1.mysql数据库

一、数据库的基本概念 1.数据 记录事物的信息&#xff1b;按统一的格式进行存储 2.表 数据的集合&#xff0c;行和列的组合&#xff1b;将多条数据组织在一起 3.数据库 表的集合&#xff0c;是存储 相互有关 数据的仓库 二、数据库管理系统 DBMS的主要功能&#xff1a; …

(2022级)成都工业学院软件构造实验二:面向对象软件构造

写在前面 1、基于2022级软件工程实验指导书 2、代码仅提供参考 3、如果代码不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 IntelliJ IDEA 2023.2.2 jdk17.0.6 实验要求 任务&#xff1a;在第2章构造任务的基础上用面向对象构造技术&#xff0c…

异常的认识(Java篇详解)

&#x1f341; 个人主页&#xff1a;爱编程的Tom&#x1f4ab; 本篇博文收录专栏&#xff1a;Java专栏&#x1f449; 目前其它专栏&#xff1a;c系列小游戏 c语言系列--万物的开始_ &#x1f389; 欢迎 &#x1f44d;点赞✍评论⭐收藏&#x1f496;三连支持一…