【软考】设计模式之桥接模式

目录

          • 1. 说明
          • 2. 应用场景
          • 3. 结构图
          • 4. 构成
          • 5. 适用性
          • 6. 优点
          • 7. 缺点
          • 8. java示例

1. 说明
  • 1.将抽象部分与其实现部分分离,使它们都可以独立地变化。
  • 2.桥接模式(Bridge Pattern)属于对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。
2. 应用场景
  • 1.图形界面库:图形界面库提供了一组通用的界面元素(如按钮、文本框、下拉菜单等),同时也提供了多种不同的绘制方式(如窗口系统的绘制、OpenGL的绘制等)。通过使用桥接模式,可以将界面元素和绘制方式解耦,使得它们可以独立地变化。
  • 2.电子商务平台:在电子商务平台中,商品和展示方式可以看作是两个独立变化的维度。桥接模式可以将它们进行解耦,使得商品和展示方式可以独立变化。
  • 3.操作系统的文件系统:文件系统可以支持多种存储介质(如磁盘、光盘、网络存储等),同时也可以支持多种文件系统类型(如FAT32、NTFS、EXT4等)。桥接模式可以将存储介质和文件系统类型进行解耦,使得它们可以独立变化。
  • 4.游戏开发中的人物角色:在游戏开发中,人物角色通常具有多种不同的属性和技能(如力量、敏捷、法力等)。这些属性和技能可以看作是两个独立变化的维度。桥接模式可以将它们进行解耦,使得人物角色的属性和技能可以独立变化。
3. 结构图

在这里插入图片描述

4. 构成
  • 1.Abstraction(抽象化角色):定义抽象类的接口,并包含一个对实现化对象的引用。
  • 2.RefinedAbstraction(扩展抽象化角色):扩充由Abstraction定义的接口。是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
  • 3.Implementor(实现化角色):定义实现类接口,该接口不一定要与Abstraction的接口完全一致;事实上这两个接口可以完全不同。一般来说,Implementor接口仅提供基本操作,而Abstraction定义了基于这些基本操作的较高层次的操作。
  • 4.ConcreteImplementor实现Implementor接口并定义它的具体实现。
5. 适用性
  • 1.不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如,这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。
  • 2.类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这是 Bridge 模式使得开发者可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充
  • 3.对一个抽象的实现部分的修改应对客户不产生影响,即客户代码不必重新编译。
  • 4.(C++)想对客户完全隐藏抽象的实现部分
  • 5.有许多类要生成的类层次结构。
  • 6.想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。
6. 优点
  • 1.分离抽象接口及其实现部分:桥接模式允许将抽象与实现解耦,使得抽象和实现可以独立地变化。这有助于降低系统的耦合性,提高系统的灵活性和可扩展性。

  • 2.提高可重用性:由于抽象和实现之间的分离,桥接模式可以提高代码的可重用性。例如,当需要实现不同的具体实现时,只需要更改实现部分,而无需修改抽象部分。

  • 3.支持动态组合:桥接模式使用对象间的组合关系替代了继承关系,使得系统可以更加灵活地进行动态组合。这有助于降低系统的复杂性,提高系统的可维护性。

7. 缺点
  • 1.增加系统的理解与设计难度:由于桥接模式需要在抽象层进行设计和编程,这可能会增加系统的理解与设计难度。开发者需要一开始就针对抽象层进行设计与编程,这需要一定的技术水平和经验。
  • 2.识别独立变化的维度:在系统中正确识别出两个独立变化的维度并不是一件容易的事情。这需要对系统有深入的理解和分析,才能准确地找到这两个维度。
  • 3.可能导致类的数量增加:桥接模式将抽象部分与实现部分分离,这可能会导致系统中类的数量增加。这可能会增加系统的复杂性,需要更加仔细地设计和管理代码。
8. java示例
  • 1.衣服抽象类Abstraction
package com.learning.bridge;/*** 衣服抽象类*/
public abstract class Clothing {// 桥接的部分,通过Color接口与实现部分连接protected Color color;public Clothing(Color color) {this.color = color;}public abstract void showColor();
} 
  • 2.衬衫类RefinedAbstraction
package com.learning.bridge;/*** 衬衫*/
public class Shirt extends Clothing {// 桥接的部分,通过Color接口与实现部分连接public Shirt(Color color) {super(color);}@Overridepublic void showColor() {  System.out.println("The shirt is " + color.getColorName() + ".");}  
}
  • 3.颜色类Implementor
package com.learning.bridge;/*** 颜色接口*/
public interface Color {// 获取颜色String getColorName();  
}  
  • 4.红色类ConcreteImplementor
package com.learning.bridge;/*** 红色*/
public class RedColor implements Color {  @Override  public String getColorName() {  return "red";  }  
}  
  • 5.蓝色类ConcreteImplementor
package com.learning.bridge;/*** 蓝色*/
public class BlueColor implements Color {  @Override  public String getColorName() {  return "blue";  }  
}
  • 8.客户端
package com.learning.bridge;/*** 客户端*/
public class Client {public static void main(String[] args) {  // 创建一个红色的衬衫  Clothing redShirt = new Shirt(new RedColor());  redShirt.showColor();// 创建一个蓝色的衬衫(不需要修改Shirt类的代码)  Clothing blueShirt = new Shirt(new BlueColor());  blueShirt.showColor();}  
}
  • 7.示例截图
    在这里插入图片描述

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

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

相关文章

Leetcode2105. 给植物浇水 II

Every day a Leetcode 题目来源:2105. 给植物浇水 II 解法1:双指针 设 Alice 当前下标为 i,初始化为 0,水量为 a,初始化为 capacityA;Bob 当前下标为 j,初始化为 n-1,水量为 b&am…

力扣98.验证二叉搜索树

法一(自己思路,复杂了): from collections import dequeclass Solution(object):def isValidBST(self, root):""":type root: TreeNode:rtype: bool"""queue deque()if root.left!None:queue.app…

FOSS全闪对象存储--与AI/ML相向而行

行业解读需求剖析 目前,随着AI/ML技术得到了快速的发展及应用,AI/ML系统对底层高速数据访问的需求也日趋强烈,虽然当前业界有多种解决方案,但都存在一些成本或性能方面的挑战,就目前常用的文件存储系统来说&#xff0…

win10共享文件夹到ubuntu22

win10共享文件夹 新建用户 新建用户、设置密码。避免共享给EveryOne,导致隐私问题。 点击左下角的开始菜单,选择“设置”(WinI)打开设置窗口。在设置窗口中,搜索或直接点击“账户”进入账户设置。在账户设置中&…

机器学习中常用的几种距离——欧式、余弦等

目录 一、欧式距离(L2距离)二、曼哈顿距离(L1距离)三、汉明距离四、余弦相似度 一、欧式距离(L2距离) (1)二维空间的距离公式(三维空间的在这个基础上类推)&…

Windows本地部署直播录屏利器Bililive-go并实现远程添加直播间录屏

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 1. Bililive-go与套件下载1.1 获取ffmpeg1.2 获取Bililive-go1.3 配置套件 2. 本地运行测试3. 录屏…

基于单片机的光照检测系统—光敏电阻

基于单片机的光照检测系统 (仿真+程序+原理图+设计报告) 功能介绍 具体功能: 1.光敏电阻实时采集环境光照值; 2.采用ADC0804将模拟值转换为数字量; 3.四位数码管显示当前的光照…

Java JDK下载安装教程(2024年)

博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…

金士顿硬盘误删数据不用慌,这些恢复方法帮你忙

在数字化日益盛行的今天,硬盘作为存储数据的重要设备,其安全性与稳定性显得尤为关键。然而,即便是品质卓越的金士顿硬盘,也难免会遇到误删除数据的尴尬情况。面对这种情况,许多用户往往感到手足无措,甚至产…

LLM Agent智能体综述(万字长文)

前言 🏆🏆🏆在上一篇文章中,我们介绍了如何部署MetaGPT到本地,获取OpenAI API Key并配置其开发环境,并通过一个开发小组的多Agent案例感受了智能体的强大,在本文中,我们将对AI Agent…

Franz Electron + React 源码启动运行填坑指南

环境要求 安装miniconda python 环境electron/rebuild用得着,miniconda 默认自带的 python 是 3.11 版本,比较新; 安装virsual studio 2019 要把C桌面相关的都安装了,大概需要20G,不要安装到 C 盘,都安装到…

FlyFlow:支持驳回后自动跨节点跳回

本周更新 新增:审批节点驳回(拒绝配置的驳回)支持自动跳回当前节点新增:修改数据节点新增:删除数据节点新增:子流程支持配置自动跳过发起人节点优化:两个项目合并一个单体项目优化:…

JavaEE初阶-多线程进阶2

文章目录 前言一、CAS1.1 CAS的概念1.2 原子类1.3 CAS的ABA问题 二、JUC中常用类2.1 Callable接口2.2 ReentrantLock(可重入)2.3 Semaphore信号量2.4 CountDownLatch类2.5 CopyOnWriteArrayList类2.6 ConcurrentHashMap 前言 对于多线程进阶的部分&…

linux安装Openresty

安装必要的依赖库 指定仓库地址 下载openresty 添加环境变量 vi /etc/profile i export NGINX_HOME/usr/local/openresty/nginx/ export PATH${NGINX_HOME}/sbin:$PATH esc :wq source /etc/profile #启动 nginx # 重启 nginx -s reload #关闭 nginx -s stop

【class8】人工智能初步(图像识别-----卷积神经网络)

上节回顾 上节课,我们简单了解了图像识别和深度学习的相关知识。 快速回顾一下吧~ A图像识别是以图像的主要特征为基础的。B. 图像分辨率决定图像的质量。 C. 像素是图像中的最小单位D. 在图像识别的原理上,计算机和人类在本质…

Linux 生态与工具

各位大佬好 ,这里是阿川的博客 , 祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 目录 Linux生态简介:Linux工具lrzsz&#xff…

Nginx配置到系统中

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Nginx(“engine x”…

Mixtral

文章目录 一、关于 MixtralMistral AI、 La PlateformeMistral AI LLMs 二、Mistral AI API账户设置 三、Mixtral 说明通过稀疏架构推动开放模型的前沿表现Instructed 模型使用开源部署堆栈部署 Mixtral在我们的平台上使用 Mixtral。 一、关于 Mixtral 官网:https:…

前端已死? Bootstrap--JS-jQuery

目录 Bootstrap--JS-jQuery 1 jQuery基础 介绍 基础语法: $(selector).action() 1.1 安装jQuery 地址 基础语法: $(selector).action() 2 jQuery事件 事件处理程序指的是当 HTML 中发生某些事件时所调用的方法。 jQuery常用事件 2.1 鼠标事件…

Find My OBD|苹果Find My技术与OBD结合,智能防丢,全球定位

OBD是英文On-Board Diagnostics的缩写,中文翻译为“车载自动诊断系统”。这个系统将从发动机的运行状况随时监控汽车是否尾气超标,一旦超标,会马上发出警示。当系统出现故障时,故障(MIL)灯或检查发动机(Check Engine)警告灯亮&…