码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 用桥接模式(Bridge)实现开放接口系统


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

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

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

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

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

    1. //抽象化的鉴权类
    2. public Interface Authenticator{
    3. void OperationAuth();
    4. }
    5. //具体鉴权类
    6. public class ConcreteAuth implements Authenticator{
    7. //生成Token并放到请求头
    8. String token = TokenCreater.createToken(SessionManager.getSK());
    9. Request.addHeader(token);
    10. }
    11. //抽象的桥接类,包含了抽象的鉴权接口和抽象的HTTP请求方法
    12. public abstract class AbstractionHttpInterface(){
    13. //这里通过构造函数,声明抽象的鉴权接口
    14. protected Authenticator auth;
    15. protected AbstractionInterface(Authenticator auth){
    16. this.auth = auth
    17. }
    18. //声明一个抽象的HTTP请求
    19. public abstract HTTPResponse SendHttpRequest(HttpRequest body);
    20. }
    21. //实现一个具体的接口
    22. class GetDeviceInterface extends AbstractionHttpInterface{
    23. //通过构造函数传递鉴权方法
    24. protected GetDeviceInterface(Authenticator auth) {
    25. super(auth);
    26. }
    27. //接口的请求体构造与实现方法
    28. public HTTPResponse SendHttpReques(HttpRequest body) {
    29. //这里写接口的具体请求方法
    30. return Request.sendRequest(body);
    31. }
    32. }

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

    使用:

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

  • 相关阅读:
    Java实现3DES加密解密(DESede/ECB/PKCS5Padding使用)
    AD硬件电路学习笔记(二) GND的种类及PCB布线实战
    【大数据】Doris 构建实时数仓落地方案详解(二):Doris 核心功能解读
    【C语言简单实现数据结构】详解二叉树
    AtCoder Beginner Contest 231(D-F,H)
    天命可测不可改,我心可明不可变!人各有命!——早读(逆天打工人爬取热门微信文章解读)
    Hudi查询类型/视图总结
    GBase 8s多个用户操作同一条记录时的并发写机制
    软件测试需要学什么,这几点一定要知道
    数据结构—归并排序-C语言实现
  • 原文地址:https://blog.csdn.net/dongzhiyu/article/details/134001022
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号