桥梁设计模式

桥梁模式

  • 桥梁模式定义
    • 使用场景
      • 1、电视机顶盒:
      • 2、蓝牙耳机:
      • 3、智能家居:
      • 4、电商平台:
      • 5、总结:
    • 角色定义
      • Abstraction-抽象化角色:
      • Implementor实现化角色:
      • RefinedAbstraction:
      • Concretelmplementor:
    • 需求背景
      • 1、首先,定义抽象化角色(Abstraction):
      • 2、接下来,定义实现化角色(lmplementor):
      • 3、修正抽象化角色(RefinedAbstraction):
      • 4、代码实现如下:
        • 4.1 抽象化角色:平台
        • 4.2 实现化角色:交流方式
        • 4.3 具体实现化角色:买家
        • 4.4 具体实现化角色:卖家
        • 4.5 具体实现化角色:卖家
        • 4.6 修正抽象化角色:具体的交流方式
        • 4.7 测试案例
        • 4.8 测试结果如下
        • 4.9 总结
        • 4.10 解耦体现
          • 4.10.1 在桥梁模式中,平台和交流方式都是抽象化的部分,它们被定义为独立的抽象类。具体实现则由各自的具体类来完成。
          • 4.10.2 在这种设计中,平台和交流方式的具体实现是彼此独立的,它们可以自由组合,不会相互影响。因此,如果需要添加新的平台或交流方式,只需要新增对应的具体类即可,不需要修改原有的代码。
          • 4.10.3 这样,平台和交流方式的解耦就得以实现。即使平台或交流方式发生变化,也不会影响到系统的其他部分,从而提高了系统的灵活性和可维护性。

桥梁模式定义

将抽象和实现解耦,使得两者可以独立地变化

使用场景

1、电视机顶盒:

电视机顶盒将电视机和网络进行解耦,使得它们可以独立变化,实现了电视节目的网络化传输。

2、蓝牙耳机:

蓝牙耳机将手机和耳机进行解耦,使得它们可以独立变化,实现了无线通信的便利。

3、智能家居:

智能家居将家庭设备和智能控制系统进行解耦,使得它们可以独立变化,实现了家居智能化的目标。

4、电商平台:

电商平台将买家和卖家进行解耦,使得它们可以独立变化,实现了线上交易的便利。

5、总结:

总之,桥梁模式在生活中有很广泛的应用,可以将不同的对象进行解耦,使它们可以独立变化,从而提高系统的灵活性和可扩展性。

角色定义

Abstraction-抽象化角色:

它的主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色般是抽象类

Implementor实现化角色:

它是接口或者抽象类,定义角色必需的行为和属性

RefinedAbstraction:

一修正抽象化角色: 它引用实现化角色对抽象化角色进行修正

Concretelmplementor:

一具体实现化角色: 它实现接口或抽象类定义的方法和属性

需求背景

使用桥梁模式实现电商平台将买家和卖家进行解耦

1、首先,定义抽象化角色(Abstraction):

平台,提供了一些方法,用于处理买家和卖家之间的交流。具体实现化角色(Concretelmplementor):买家和卖家,实现了平台提供的方法。

2、接下来,定义实现化角色(lmplementor):

交流方式,包括文字、语音、视频等多种方式。

3、修正抽象化角色(RefinedAbstraction):

具体的交流方式,比如文字交流、语音交流、视频交流等。

4、代码实现如下:

4.1 抽象化角色:平台

// 抽象化角色:平台
abstract class Platform {
    protected Implementor implementor;

    public void setImplementor(Implementor implementor) {
        this.implementor = implementor;
    }

    public void communicate() {
        implementor.communicate();
    }
}

4.2 实现化角色:交流方式

// 实现化角色:交流方式
interface Implementor {
    void communicate();
}

4.3 具体实现化角色:买家


4.4 具体实现化角色:卖家

// 具体实现化角色:买家
class Buyer implements Implementor {
    public void communicate() {
        System.out.println("使用文字交流");
    }
}

4.5 具体实现化角色:卖家

// 具体实现化角色:卖家
class Seller implements Implementor {
    public void communicate() {
        System.out.println("使用语音交流");
    }
}

4.6 修正抽象化角色:具体的交流方式

// 修正抽象化角色:具体的交流方式
class TextCommunication extends Platform {
    public void communicate() {
        System.out.println("买家和卖家使用文字交流");
        implementor.communicate();
    }
}
class VoiceCommunication extends Platform {
    public void communicate() {
        System.out.println("买家和卖家使用语音交流");
        implementor.communicate();
    }
}

4.7 测试案例

public class BridgeTest {
    public static void main(String[] args) {
        Platform platform = new TextCommunication();
        platform.setImplementor(new Buyer());
        platform.communicate();

        platform = new VoiceCommunication();
        platform.setImplementor(new Seller());
        platform.communicate();
    }
}

4.8 测试结果如下

买家和卖家使用文字交流
使用文字交流
买家和卖家使用语音交流
使用语音交流

4.9 总结

桥梁模式是一种将抽象部分与具体实现部分分离的设计模式。它通过将实现部分抽象出来,使得它们可以独立地变化,从而达到解耦的目的。在使用桥梁模式时,需要合理使用Abstraction、lmplementor、RefinedAbstraction和Concretelmplementor等角色,以达到最佳的效果。

4.10 解耦体现

4.10.1 在桥梁模式中,平台和交流方式都是抽象化的部分,它们被定义为独立的抽象类。具体实现则由各自的具体类来完成。
4.10.2 在这种设计中,平台和交流方式的具体实现是彼此独立的,它们可以自由组合,不会相互影响。因此,如果需要添加新的平台或交流方式,只需要新增对应的具体类即可,不需要修改原有的代码。
4.10.3 这样,平台和交流方式的解耦就得以实现。即使平台或交流方式发生变化,也不会影响到系统的其他部分,从而提高了系统的灵活性和可维护性。

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

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

相关文章

编译一个魔兽世界开源服务端Windows需要安装什么环境

编译一个魔兽世界开源服务端Windows需要安装什么环境 大家好我是艾西,去年十月份左右wy和bx发布了在停服的公告。当时不少小伙伴都在担心如果停服了怎么办,魔兽这游戏伴随着我们渡过了太多的时光。但已经发生的事情我们只能顺其自然的等待GF的消息就好了…

平均情况时间复杂度

// n表示数组array的长度 int find(int[] array, int n, int x) {int i 0;int pos -1;for (; i < n; i) {if (array[i] x){ pos i; break;}}return pos; } 通过以上代码&#xff0c;我们分析一下平均情况时间复杂度。 以上代码要查找的变量 x 在数组中的位置&#xff…

2023哪款蓝牙耳机性价比高?200左右高性价比蓝牙耳机推荐

现如今的蓝牙耳机越来越多&#xff0c;人们在选择时不免纠结&#xff0c;不知道选什么蓝牙耳机比较好&#xff1f;针对这个问题&#xff0c;我来给大家推荐几款性价比高的蓝牙耳机&#xff0c;一起来看看吧。 一、南卡小音舱Lite2蓝牙耳机 参考价&#xff1a;299 蓝牙版本&am…

【文件描述符|重定向|缓冲区】

1 C语言文件操作的回顾 这块博主在讲解C语言时就已经做了很详细的讲解&#xff0c;这里就不详细讲了&#xff0c;直接给出代码。 写操作&#xff1a; #include<stdio.h> #include<stdlib.h> #include<errno.h> #define LOG "log.txt" …

3DES实验 思考与练习:

T1&#xff1a;关于3DES的分析 和 库函数的思考——完全领悟了&#xff01;&#xff01;&#xff01; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/des.h> /***********************************************…

【pyTorch学习笔记④】PyTorch基础·中篇

文章目录 三、Numpy与Tensor3.Tensor的索引4.Tensor的广播机制5.逐元素操作6.归并操作7.比较操作8.矩阵操作9.PyTorch与Numpy的比较 相关推荐 三、Numpy与Tensor 3.Tensor的索引 &#xff08;1&#xff09;item&#xff1a;若Tensor为单元素&#xff0c;则返回标量&#xff0…

对偶问题和KKT条件

KKT条件 对于不等式约束优化问题 min ⁡ f ( x ) s . t . g ( x ) ≤ 0 \min\quad f(x)\\ {\rm s.t.}\quad g(x)\leq 0 minf(x)s.t.g(x)≤0 拉格朗日函数为 L ( x , λ ) f ( x ) λ g ( x ) L(x,\lambda)f(x)\lambda g(x) L(x,λ)f(x)λg(x) 。 KKT条件包括 拉格朗日函…

工厂方法模式

// 简单工厂模式 #include <iostream> #include <string>// 抽象产品类 class Product { public:virtual ~Product() {}virtual std::string getName() 0; };// 具体产品类A class ProductA : public Product { public:std::string getName() {return "Produ…

(抄送列表,年会抽奖)笔试强训

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 目录 文章目录 一、[编程题]抄送列表 二、[编程题]年会抽奖 一、[编程题]抄送列表 链接&#xff1a;抄送列表__牛客网 来源&#xff1a;牛客网 题目&#xff1a; NowCoder每天要处理许多邮…

ChatGPT实现服务器体验沙箱

服务器体验沙箱 IT 人员在学习一门新技术时&#xff0c;第一个入门门槛通常都是"如何在本地安装并成功运行"。因此&#xff0c;很多技术的官网都会通过沙箱技术&#xff0c;提供在线试用的 playground 或者按步模拟的 tour。让爱好者先在线尝试效果是否满足预期&…

MATLAB函数封装2:QT调用封装函数

在利用MATLAB进行封装函数之后&#xff0c;最主要的目的是对函数进行调用&#xff0c;能够对矩阵运算和其他算法的运行进行快捷处理。 在有了MATLAB函数之后封装成DLL文件之后&#xff0c;在QT中添加动态链接库&#xff0c;就可以实现函数的调用过程&#xff0c;这个过程相对简…

选择云原生是企业进行技术变革的必经之路

前言 众所周知&#xff0c;云计算领域的蓬勃发展&#xff0c;让越来越多的企业将自己的业务搬到云上&#xff0c;上云已经成为大部分企业的首选操作。无论是头部的中大型企业&#xff0c;还是普通的微小企业&#xff0c;企业业务是亘古不变的核心&#xff0c;这关系着企业的命脉…

7.0、Java继承与多态 - 多态的特性

7.0、Java继承与多态 - 多态的特性 面向对象的三大特征&#xff1a;封装性、继承性、多态性&#xff1b; extends继承 或者 implements实现&#xff0c;是多态性的前提&#xff1b; 用学生类创建一个对象 - 小明&#xff0c;他是一个 学生&#xff08;学生形态&#xff09;&…

彻底告别手动配置任务,魔改xxl-job!

分析 改造 1、接口调用 2、创建新注解 3、自动注册核心 4、自动装配 测试 测试后 XXL-Job是一款非常优秀的任务调度中间件&#xff0c;其轻量级、使用简单、支持分布式等优点&#xff0c;被广泛应用在我们的项目中&#xff0c;解决了不少定时任务的调度问题。不仅如此&a…

TIM-定时器——STM32

TIM-定时器——STM32 TIM(Timer)定时器 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能&#xff0c;而且还包…

Mybatis方式完成CRUD操作

Mybatis方式完成CRUD操作 文章目录 Mybatis方式完成CRUD操作1、java以Mybatis方式操作DB1.1、配置数据源-创建 resources/mybatis-config.xml1.2、创建java bean-Monster1.3、配置Mapper接口声明方法1.4、配置xxMapper&#xff0c;完成SQL配置,实现CRUD操作1.5、Test测试 2、需…

jvm调优策略

jvm调优主要是内存管理方面的调优&#xff0c;包括各个代的大小&#xff0c;GC策略等。 代大小调优 JVM 中最大堆大小有三方面限制&#xff1a;相关操作系统的数据模型&#xff08;32-bt还是64-bit&#xff09;限制&#xff1b;系统的可用虚拟内存限制&#xff1b;系统的可用物…

第三十二章 Unity Mecanim动画系统(上)

在上一章节中&#xff0c;我们介绍了Unity的旧版动画系统&#xff0c;本章节来介绍新版的Mecanim动画系统。新版的Mecanim动画系统实际是对旧版动画系统的升级。新版的Mecanim动画系统仍然是建立在动画片段的基础上的&#xff0c;只不过它给我们提供了一个可视化的窗口来编辑动…

R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习

详情点击链接&#xff1a;R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习 Meta分析的选题与文献检索 Meta分析Meta分析的选题策略文献检索数据库精确检索策略&#xff0c;如何检索全、检索准文献的管理与清洗&#xff0c;如何制定文献纳入排除标准文献数据获取技…

搭建网站使用轻量云服务器怎么样?

​  搭建网站实际上可以从轻量云服务器租用中受益匪浅。如果您正在为个人网站寻找更多的低成本和轻运维&#xff0c;您可以考虑将轻量云服务器作为一个可行的选择。它提供独享资源、独立的IP地址、专属防火墙以及比传统虚拟主机更好的安全性能。本文将介绍轻量云服务器对建站…
最新文章