用桥接模式(Bridge)实现开放接口系统

桥接模式是设计模式中比较难的一种,其原文叙述是:“将抽象部分与它的具体实现部分分离,使它们都可以独立地变化,属于结构型模式。”表述也很抽象,其本质是通过一个抽象类A的构造函数传入一个Interface类B作为参数,这样在实现抽象类A和实例化时,传入抽象类B的实现类,可以实现抽象类A和B的灵活配置,如此完成实现两个部分都可以独立变化的目的。

在软件系统开发中,开放接口系统的设计是比较常见的。开放接口系统一般也包含两个独立变化的部分:

一是鉴权系统,一般包括了token解析、时间戳的对比等,而且往往对接的各种系统都有自己的鉴权方式,不同系统鉴权模式各不相同。

二是接口数据,一般用于发送http请求或者从对方返回的http响应中获取数据(这里暂不讨论通过监听http接口接受被动访问的接口,那些接口一般用controller实现)。

这两个部分很适合用桥接模式实现:

//抽象化的鉴权类
public Interface Authenticator{void OperationAuth();}//具体鉴权类
public class ConcreteAuth implements Authenticator{//生成Token并放到请求头String token = TokenCreater.createToken(SessionManager.getSK());Request.addHeader(token);    
}//抽象的桥接类,包含了抽象的鉴权接口和抽象的HTTP请求方法
public abstract class AbstractionHttpInterface(){//这里通过构造函数,声明抽象的鉴权接口protected Authenticator auth;protected AbstractionInterface(Authenticator auth){this.auth = auth} //声明一个抽象的HTTP请求public abstract HTTPResponse SendHttpRequest(HttpRequest body);
}//实现一个具体的接口
class GetDeviceInterface extends AbstractionHttpInterface{//通过构造函数传递鉴权方法protected GetDeviceInterface(Authenticator auth) {super(auth);} //接口的请求体构造与实现方法public HTTPResponse SendHttpReques(HttpRequest body) {//这里写接口的具体请求方法return Request.sendRequest(body);}
}

注:以上代码并非完整代码,仅供理解原理。

使用:

//先声明鉴权方法Authenticator authMethod = new ConcreteAuth();//具体的设备数据获取类
AbstractionHttpInterface getDeviceRequest = new GetDeviceInterface(authMethod);getDeviceRequest.SendHttpRequest();

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker | docker常用命令

Docker | docker常用命令 帮助命令 docker version # 显示docker版本信息 docker info # 显示docker系统系统信息,镜像以及容器数量等信息 docker 命令 --help # 帮助命令启动docker服务 service docker start 或者停止docker服务 service docker stop检查do…

思维导图软件 ConceptDraw MINDMAP mac中文特色介绍

ConceptDraw MINDMAP mac是一款思维导图绘制软件,它可以帮助用户快速创建各种类型的思维导图,如组织结构图、流程图、概念图和UML图等。该软件具有直观的界面和简单易用的操作方式,使得用户能够轻松地创建复杂的思维导图。此外,它…

Android Studio新功能-设备镜像Device mirroring-在电脑侧显示手机实时画面并可控制

下载最新的灰测版本-蜥蜴 成功运行到真机后,点击右侧Running Devices选项卡,再点击号 选中当前设备; 非常丝滑同步,在电脑侧也可以顺畅控制真机 该功能大大方便了我们视线保持在显示器上专注开发,并且便于与UI视觉进行…

尾递归,还是递推?

关于斐波那契数的计算,写成递归式就是 func fib(n) {if(n0||n1) return 1;return fib(n-1)fib(n-2); }改成尾递归格式变为: func fib(n, propose, next) {if(n0) return propose;return fib(n-1, next, proposenext); }参数变复杂了。因为尾递归不允许…

搜维尔科技:伦敦艺术家利用Varjo头显捕捉盲人隐藏的梦想

在伦敦举行的弗里泽艺术博览会上,与专业级虚拟现实/XR硬件和软件领域的全球领先者Varjo合作,展示一个突破性的混合现实艺术装置, 皇家国家盲人学会 (rnib),英国领先的视力丧失慈善机构。 这个名为"公共交通的私人生活"的装置是一个互动的声音和图像雕塑,旨在让有眼光…

KNN-水仙花的分类

题目: 思路: 1、处理数据集,这里用的是题目已知的数据集,所以说需要提前将写好的数据放到excel表格里,再进行读取。 2、将数据集划分为训练集和测试集 3、定义K-NN模型。 4、训练模型 5、预测模型 6、计算分类精…

通过VScode连接远程 Linux 服务器修改vue代码

1先在Linux环境安装node,官网下载的node安装包放在自己新建文件夹 2解压 tar -zxvf node-v18.18.0-linux-x64.tar.xz 3新建代码路径, 下载代码 4安装 OpenSSH OpenSSH 可以让你在终端使用 ssh 命令,Windows10 一般自带。 可以通过以下方式…

git中如何在父仓库提交子仓库的修改

子仓库在父仓库中进行了修改,你需要按照以下步骤提交子仓库的修改: 切换到子仓库目录:使用cd命令进入子仓库所在的目录。拉取子仓库的最新更改:使用git pull命令拉取子仓库的最新更改,确保你的本地是最新的版本。提交…

大数据技术学习笔记(二)—— Hadoop 运行环境的搭建

目录 1 准备模版虚拟机hadoop1001.1 修改主机名1.2 修改hosts文件1.3 修改IP地址1.3.1 查看网络IP和网关1.3.2 修改IP地址 1.4 关闭防火墙1.5 创建普通用户1.6 创建所需目录1.7 卸载虚拟机自带的open JDK1.8 重启虚拟机 2 克隆虚拟机3 在hadoop101上安装JDK3.1 传输安装包并解压…

Webpack 基础以及常用插件使用方法

目录 一、前言二、修改打包入/出口配置步骤 三、常用插件使用html-webpack-plugin打包 CSS 代码提取 CSS 代码优化压缩过程打包 less 代码打包图片文件 一、前言 本质上,Webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时…

[Unity]PostProcessing导入新场景报 NullReferenceException

问题描述 NullReferenceException: Object reference not set to an instance of an object NullReferenceException: Object reference not set to an instance of an object UnityEngine.Rendering.PostProcessing.AmbientOcclusion.IsEnabledAndSupported (UnityEngine.Re…

【接口测试】Jmeter接口实战-Dubbo接口+造10W数据测试(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、Windows环境通…

深入了解JavaScript中的AJAX和HTTP请求

在现代Web开发中,AJAX(Asynchronous JavaScript and XML)和HTTP请求被广泛应用于实现动态交互式网页。本文将深入探讨AJAX的概念、工作原理以及使用方法。 什么是AJAX? AJAX是一种利用JavaScript和HTTP请求与服务器进行异步通信的…

关系型数据库的问题和NoSQL数据库的应用

1.关系型数据库的问题 系统使用通用的商用关系型数据库,系统内部数据采用中央集中方式存储。系统投入使用后,初期用户数量少,系统运行平稳。一段时间后,用户数出现了爆炸式增长,系统暴露出诸多问题,集中表…

66 跳跃游戏

跳跃游戏 题解1 贪心题解2 DP(超时, 但思路应该对) 给你一个非负整数数组 nums,你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 …

c语言进制转换表

c语言进制转换表 c语言进制转换表 c语言进制转换表 END

制造业中的微小缺陷检测——应用场景分析与算法选择(YoloV8/CANet)

一、缺陷检测任务 缺陷检测的任务通常可以分为三个主要阶段,包括缺陷分类、缺陷定位和缺陷分割。 1.缺陷分类 缺陷分类是检测过程的第一步,目的是将检测到的缺陷区域分类为不同的类别,通常是根据缺陷的性质或类型进行分类。分类的类别包括…

中文编程开发语言工具系统化教程初级1上线

中文编程系统化教程初级1 学习编程捷径:(不论是正在学习编程的大学生,还是IT人士或者是编程爱好者,在学习编程的过程中用正确的学习方法 可以达到事半功倍的效果。对于初学者,可以通过下面的方法学习编程,…

工控安全与网络安全有什么不同?

在当代,全球制造业正在经历一场前所未有的技术变革。工业4.0不仅代表着自动化和数据交换的进步,它还揭示了工业自动化、智能制造与系统集成的融合。这种集成为企业带来了效率和质量的双重提升,但同时也暴露出新的安全隐患。工控系统成为了这一…

Leetcode58最后一个单词的长度

代码: class Solution {public int lengthOfLastWord(String s) {int len0;int is.length()-1;for(;i>0;i--){if(s.charAt(i)! )break;}for(;i>0;i--){if(s.charAt(i)! )len;else break;}return len;} }