23种设计模式之桥接模式(Bridge Pattern)

news2024/11/24 0:13:08

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的桥接模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

以下正文开始
在这里插入图片描述

文章目录

  • 桥接模式概念
  • 桥接模式优缺点
  • 桥接模式案例
  • 桥接模式小结

桥接模式概念

桥接模式是一种结构型设计模式,它可以将抽象部分和实现部分分离开来,使它们可以独立地进行变化。桥接模式的本质是解耦合,即将一个系统从多个角度进行划分,并尽可能地将它们之间建立桥梁连接起来。这样可以使得不同的维度变化互相独立,从而更加易于理解、扩展和修改。

桥接模式由四个要素组成:抽象类、具体类、抽象实现类和具体实现类。其中,抽象类和具体类是针对抽象部分的封装,抽象实现类和具体实现类是针对实现部分的封装。通过将抽象类和抽象实现类分别定义为接口,并用具体类和具体实现类来实现它们,形成一个两层的继承结构,就可以使得抽象部分和实现部分可以独立地进行扩展和变化。

在桥接模式中,客户端只需要关心抽象部分和实现部分如何协作,而不需要了解它们的具体实现细节。这样,就可以让客户端与底层的实现部分分离开来,从而提高系统的灵活性、可扩展性和可维护性。

桥接模式优缺点

下面是桥接模式的主要优点:

  • 抽象部分和实现部分可以独立地变化,扩展性强。
  • 可以更好地解耦合,降低系统的耦合度。
  • 可以提高系统的可扩展性和可维护性。
  • 可以对客户端隐藏系统的实现细节,使接口更加简洁易用。

当然,桥接模式也有局限性:

  • 如果抽象部分和实现部分需要频繁变化,可能会导致类的数量增多。
  • 在实现部分中添加新逻辑时,可能需要修改抽象部分的接口,这可能会导致客户端代码重新编译。

桥接模式案例

接下来以一个案例来详细介绍桥接模式的概念及应用:

// 定义抽象部分的接口
interface AbstractInterface {
    public void doSomething();
}

// 定义实现部分的接口
interface ImplementorInterface {
    public void implement();
}

// 实现具体的抽象部分类
class ConcreteClassA implements AbstractInterface {
    private ImplementorInterface implementor;
    
    public ConcreteClassA(ImplementorInterface implementor) {
        this.implementor = implementor;
    }
    
    public void doSomething() {
        System.out.print("ConcreteClassA - ");
        this.implementor.implement();
    }
}

class ConcreteClassB implements AbstractInterface {
    private ImplementorInterface implementor;
    
    public ConcreteClassB(ImplementorInterface implementor) {
        this.implementor = implementor;
    }
    
    public void doSomething() {
        System.out.print("ConcreteClassB - ");
        this.implementor.implement();
    }
}

// 实现具体的实现部分类
class ConcreteImplementorA implements ImplementorInterface {
    public void implement() {
        System.out.println("ConcreteImplementorA");
    }
}

class ConcreteImplementorB implements ImplementorInterface {
    public void implement() {
        System.out.println("ConcreteImplementorB");
    }
}

// 客户端调用
public class Client {
    public static void main(String[] args) {
        // 创建实现部分对象
        ImplementorInterface implementorA = new ConcreteImplementorA();
        ImplementorInterface implementorB = new ConcreteImplementorB();
        
        // 创建抽象部分对象,并将其和实现部分对象关联
        AbstractInterface abstractA = new ConcreteClassA(implementorA);
        AbstractInterface abstractB = new ConcreteClassB(implementorB);
        
        // 调用抽象类的方法
        abstractA.doSomething();  // 输出 "ConcreteClassA - ConcreteImplementorA"
        abstractB.doSomething();  // 输出 "ConcreteClassB - ConcreteImplementorB"
    }
}

在上面的示例中,我们首先定义了一个抽象部分和实现部分的接口 AbstractInterface 和 ImplementorInterface。然后,我们创建了具体的抽象类和实现类来实现接口,并将它们关联起来。在客户端调用时,我们可以先创建实现部分对象,再将其和抽象部分对象关联,并调用抽象部分的方法来完成具体业务逻辑。

桥接模式小结

桥接模式是一种非常有用的设计模式,它可以帮助我们通过将系统划分为抽象部分和实现部分,并将它们进行桥接连接来解决复杂系统设计中的耦合问题。

好了,本篇文章就先分享到这里了,后续将会继续介绍23种设计模式之其他模式,感谢大佬认真读完支持咯~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
希望能和诸佬们一起努力,今后我们顶峰相见🍻
再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述

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

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

相关文章

【Selenium下】——全栈开发——如桃花来

目录索引 获取元素信息:获取单个文本和属性:*获取文本:**获取属性:* 获取多个文本和属性值: 等待:显示等待:time等待: EC:常见方法: 前进后退:选项卡管理&…

同步管理1000个设备的VLAN数据,这都行?

大家好,我是老杨。 很多网工在工作中,经常会遇到企业网的交换机上需要保持VLAN信息同步的情况。 因为只有这样,才可以以保证所有交换机都能进行正确的数据转发。 小型企业网中,你可以直接登录到每台交换机上进行VLAN的配置和维…

使用Atmel Studio开发Arduino的ATmega328P单片机

摘要:我们知道Arduino开发板常用的芯片是Atmel公司生产的AVR微控制器系列。最常见的是ATmega328P,被广泛用于Arduino Uno开发板。其他常用的AVR芯片包括ATmega2560和ATmega32U4。使用Arduino平台开发AVR的单片机非常方便。Arduino IDE提供了一个非常简洁…

中睿天下成为国家信息安全漏洞库(CNNVD)一级技术支撑单位

近日,中国信息安全测评中心公布2023年度国家信息安全漏洞库技术支撑单位名单,中睿天下荣获中国信息安全测评中心颁发的“国家信息安全漏洞库(CNNVD)技术支撑单位等级(一级)证书”,成为该领域最高…

在tomcat中手动部署应用

以maven做为构建工具的web应用为例,如下图: 在tomcat中运行应用,运行的是应用的字节码文件,所以我先执行package生命周期,新增target文件夹,如下: 打开上面的war文件,跟第一个红框里…

Gradio的web界面演示与交互机器学习模型,全局状态与会话状态《4》

全局状态和会话状态,对于程序员来说都是很熟悉的了,开发中会经常遇到,这里看下在Gradio中是怎么使用的,以及对GPT2的一点介绍 一、Global State全局状态 如果定义的函数想要访问外部的数据,可以将变量写在外面成为一…

赛效: 用佐糖办公工具怎么黑白照片上色

了解更多办公工具的相关应用教程,可到赛效官方网站查看应用软件或应用问答栏目了解更多~ 老旧的照片一般是黑白色,黑白色的照片看起来比较陈旧,这时候可以借助一些在线处理图片的工具来还原照片的颜色,哪些在线办公工具支持给黑白…

动环监控系统这个用途,简直太实用了!

烟草仓库对环境要求高,而人工管理库房无法做到24小时的检查管理,如果突发高温、潮湿等现象,易引发霉变、虫蛀等情况,导致出现损失。 为了提高烟草的存放质量,达到防治霉菌的目的,减少人为监测存在误差而造成…

融云跨平台 SDK 自动生成技术的探索和实践

移步【融云全球互联网通信云】回复“地图”免费领 移步公众号报名报名 WICC 出海嘉年华 作为即时通讯云的领创品牌,融云的通信云产品广泛地服务于社交沟通、直播互动、实时社区、商业沟通等场景。关注【融云全球互联网通信云】了解更多 随着应用场景的丰富和开发…

华为设备内网常用访问控制案例配置

实现 vlan 10不能访问其它vlan但可以上网,用traffic-filter实现 vlan20 不能访问其它vlan但可以上网,用mqc实现 vlan 30不能上外网,但可以和其它网段通信,用mqc实现 交换机配置 : [Huawei]dis current-configuration sysname Hua…

总结JVM重要知识点

一.类加载和创建对象的过程 1.类加载 1.编译 : 将源码文件(.java)编译成JVM可以解释的.class文件 . 语法分析>语义分析>注解处理 , 生成class文件 2.加载 : 装载 : 字节码本来存储在硬盘上 , 需要运行时 , 有类加载系统负责将类的信息加载到内存中(方法区) , 使用的是类…

距离6月18日DAMA-CDGA/CDGP认证考试还有31天,报名从速

6月18日DAMA-CDGA/CDGP数据治理认证考试开放报名中! 考试开放地区:北京、上海、广州、深圳、长沙、呼和浩特、杭州、南京、济南、成都、西安。其他地区凑人数中… DAMA-CDGA/CDGP数据治理认证班进行中,报名从速! DAMA认证为数据管…

crow-han(基于go-micro框架的微服务脚手架)-02-添加一个微服务实战(已k8s为例)

文章目录 1. 目录结构2. 添加自己的微服务2.1 配置文件和必要的函数2.1.1 配置文件2.1.2 连接k8s 2.2 k8s服务相关代码2.3 proto2.3.1 创建proto文件2.3.2 编译proto 2.4 handler2.5 k8s的main函数 3. gateway调用3.1 调用微服务3.2 router 4. 添加文档 swagger5. 调试5.1 启动…

自学黑客(网络安全)有哪些技巧——初学者篇

很多人说,要想学好黑客技术,首先你得真正热爱它。 热爱,听着多么让人激情澎湃,甚至热泪盈眶。 但很可惜,“热爱”这个词对还没入门的小白完全不管用。 如果一个人还没了解过你就说爱你,不是骗财就是骗色…

第三十四章 使用react-redux进一步管理状态

react-redux和redux是两个不同的概念。 redux是一个重要的数据管理库。redux的作用是帮助处理应用程序中复杂的数据管理和状态管理,它可以让你的应用程序更加可维护和可扩展。 react-redux是一个react库,它可以帮助react开发者在react应用程序中集成re…

Java经典笔试题—day11

Java经典笔试题—day11 🔎选择题🔎编程题🥝最近公共祖先🥝最大连续bit数 🔎结尾 🔎选择题 (1)下面哪个标识符是合法的? A.9HelloWorld B._Hello World C.Hello*World D.Hello$World D Java中标…

操作符讲解1---C语言

目录 前言: 1.什么是操作符 2.算术操作符 3.移位操作符 4.位操作符 5.逻辑操作符 5.1逻辑与 5.2逻辑或 5.3练习 5.4逻辑非 前言: 博主这几天都在积累知识,俗话说:”只有多输入才能有输出”。在写博客之前,也…

一文1000字从0到1实现Jenkins+Allure+Pytest的持续集成

一、配置 allure 环境变量 1、下载 allure是一个命令行工具,可以去 github 下载最新版:https://github.com/allure-framework/allure2/releases 2、解压到本地 3、配置环境变量 复制路径如:F:\allure-2.13.7\bin 环境变量、Path、添加 F:\…

【硬核】C语言指针是什么?深入浅出带你掌握C语言指针!

指针与底层硬件联系紧密,使用指针可操作数据的地址,实现数据的间接访问,本文章内容如下 1、C语言指针的作用 2、计算机的存储机制 3、如何定义指针 4、如何操作指针 5、数组与指针的关系 6、指针使用中的一些注意事项 1、C语言指针有什么作用…

企业级架构设计原则(含架构管理原则、业务架构设计原则、应用架构设计原则、数据架构设计原则、技术架构设计原则)

Togaf中的架构原则是一组用于指导企业架构设计和决策的基本准则。这些原则旨在支持组织的目标、价值观和战略,并提供一致性、可持续性和可扩展性的架构方案。 Togaf中提供了一些常见的架构原则,比如:保持一致性:确保架构与组织的目…