大话设计模式——11.桥接模式(Bridge Pattern)

简介

将抽象部分与它的实现部分分离,使它们可以独立变化。

UML图:
6
应用场景:

  1. 系统需要在构建的抽象化角色和具体化角色之间增加更多的灵活性
  2. 不想使用继承导致系统类的个数急剧增加
  3. 某个类存在多个变化维度使用继承方式容易出现类的膨胀
示例

手机厂商和软件厂商

  1. 实现类:软件
public interface Software {/*** 运行*/void run();
}

1.1 具体实现类:

public class MusicSoftware implements Software{@Overridepublic void run() {System.out.println("运行 音乐软件");}
}
public class GameSoftware implements Software {@Overridepublic void run() {System.out.println("运行 游戏软件");}
}
  1. 抽象类:手机
public abstract class Phone {protected Software software;public Phone(Software software) {this.software = software;}/*** 使用*/public abstract void use();}

2.1 实现类:

public class AndroidPhone extends Phone {public AndroidPhone(Software software) {super(software);}@Overridepublic void use() {System.out.println("安卓手机....");software.run();}
}
public class IOSIphone extends Phone {public IOSIphone(Software software) {super(software);}@Overridepublic void use(){System.out.println("苹果手机....");software.run();}
}
  1. 运行
public class Main {public static void main(String[] args) {Software musicSoftware = new MusicSoftware();Software gameSoftware = new GameSoftware();new AndroidPhone(musicSoftware).use();new IOSIphone(musicSoftware).use();new AndroidPhone(gameSoftware).use();new IOSIphone(gameSoftware).use();}
}

在这里插入图片描述

总结
  • 优点
    • 实现抽象和实现的分离,提高系统灵活性
    • 具备良好的扩展性,符合开闭原则
  • 缺点
    • 增加系统的理解和设计难度
VS 适配器模式
  • 适用阶段不同
    • 桥接模式用于设计的前期,精细化的设计,让系统更加灵活
    • 适配器模式用于设计完成之后,发现类、接口之间无法一同工作,需要进行填坑
  • 应用场景
    • 适配器模式经常用于在第三方API协同工作的场合

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

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

相关文章

Windows编译运行TensorRT-YOLOv9 (C++)

Windows编译运行yolov9-bytetrack-tensorrt(C) 1 基础环境2 编译yolov9-bytetrack-tensorrt(1)下载yolov9-bytetrack-tensorrt源码(2)修改CMakeLists.txt(3)CMake编译 3 yolov9模型转…

python+appium调@pytest.mark.parametrize返回missing 1 required positional argument:

出错描述: 1、在做pythonappium自动化测试时,使用装饰器pytest.mark.parametrize(“参数”,[值1,值2,值3]),测试脚本执行返回test_xx() missing 1 required positional argument:“…

【数据结构与算法】:归并排序和计数排序

1. 归并排序 归并排序是一种效率仅次于快速排序的排序算法。它有非递归和递归两种实现方式(本文只讲述递归实现,非递归实现以后有专门的文章)。 其实,归并排序也叫外排序。它不仅可以对内存中的数据进行排序,还能对文件里的数据排序。 比如&…

革新铁路安全管理,RFID电子锁技术提升效率与防护

一、铁路行业的现状与挑战 铁路行业作为全球重要的交通基础设施,承担着庞大的客运和货运任务。随着铁路网络的不断扩张,如何确保铁路资产的安全、提高运营效率、降低维护成本,成为行业面临的主要挑战。传统的铁路资产管理依赖于人工巡检和记…

colmap安装问题汇总

问题目录 问题0、没有root权限怎么安装colmap? 问题1、ERROR: SiftGPU not fully supported/Could not connect to any X display 问题2、Cannot specify include directories for imported target "freeimage::FreeImage". 问题3、could not find ZL4 问…

【GEE】遥感数据趋势分析Sen+mk

Map.centerObject(table);// 定义时间范围 var stary 2001, endy 2023; //NDVI图像集合 var NDVICL ee.ImageCollection(ee.List.sequence(stary, endy).map(function(year) {// 定义每年的开始和结束日期var startd ee.Date.fromYMD(year, 1, 1);var endd ee.Date.fromYM…

精益管理培训在哪些行业比较适用?

在当今瞬息万变的市场环境中,企业竞争日趋激烈,如何提升内部管理水平、降低成本、提高效率,成为企业持续发展的关键。精益管理作为一种先进的管理理念和方法,正逐渐被越来越多的行业所采纳和应用。本文(深圳天行健精益…

【Vue】响应式原理与ref

首先讲讲JS中的Proxy JavaScript 运行环境包含了一些不可枚举、不可写入的对象属性,然而在 ES5 之前开发者无法定义他们自己的不可枚举属性或不可写入属性。ES5 引入 Object.defineProperty() 方法以便开发者在这方面能够像 JS 引擎那样做。 ES6 为了让开发者能进…

【C语言】:字符函数和字符串函数

这里写目录标题 1、strlen的使用和模拟实现2、strcpy的使用和模拟3、strcat 的使用和模拟实现4、strcmp 的使用和模拟实现5、strncpy 函数的使用6、strncat 函数的使用7、strncmp函数的使用8、strstr 的使用和模拟实现9、strtok 函数的使用10、strerror 函数的使用11、字符分类…

C语言——关于指针运算的例题分析

1.指针运算中关于 sizeof 和 strlen 的例题分析 1. sizeof(数组名),这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩。 2. &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址。 3. 除此之外所有的数组名都表⽰…

汇编入门--基础知识(1)

1.汇编语言的概念 汇编语言是一种低级编程语言,它与计算机的机器语言非常接近,但比机器语言更易于人类阅读和理解。汇编语言是用一系列的助记符来表示机器语言的操作码和操作数。每种计算机体系结构(如x86、ARM等)都有自己的汇编语…

12.java openCV4.x 入门-HighGui之图像窗口显示

专栏简介 💒个人主页 📰专栏目录 点击上方查看更多内容 📖心灵鸡汤📖我们唯一拥有的就是今天,唯一能把握的也是今天建议把本文当作笔记来看,据说专栏目录里面有相应视频🤫 🧭文…

算法刷题Day29 |491.递增子序列、46.全排列、47.全排列 II

目录 0 引言1 递增子序列1.1 我的解题 2 全排列2.1 我的解题 3 全排列 II3.1 我的解题 🙋‍♂️ 作者:海码007📜 专栏:算法专栏💥 标题:算法刷题Day29 |491.递增子序列、46.全排列、47.全排列 II❣️ 寄语&…

linux安装dubboAdmin

1.环境准备: jdk-8u391-linux-x64apache-maven-3.9.6apache-tomcat-8.5.100 2.安装注册中心zookeeper zookeeper的安装看我的另一篇文章,安装完成后保持启动状态 linux安装Zookeeper的详细步骤-CSDN博客 3.安装dubboadmin 源码下载地址:R…

vue快速入门(十四)reduce求和

注释很详细&#xff0c;直接上代码 新增内容 非嵌套情况求和嵌套情况求和 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale…

C++第十五弹---string基本介绍(一)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、什么是STL 2、STL的版本 3、STL的六大组件 4、STL的重要性 5、如何学习STL 6、STL的缺陷 7、为什么学习string类 7.1、C语言中的字符串…

Google play开发者新手必看:2024最新最全的谷歌上架避坑指南

Google Play作为一个全球性的Android应用分发平台&#xff0c;吸引了无数开发者的目光。据统计&#xff0c;该平台的月活跃用户数已超过20亿&#xff0c;这无疑是一个巨大的市场。 但随着行业的发展&#xff0c;谷歌风控和审核机制不断升级&#xff0c;即便是经验丰富的开发者也…

Nginx配置文件修改结合内网穿透实现公网访问多个本地web站点

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…

抖音评论ID提取工具|视频关键词评论批量采集软件

抖音评论ID提取工具&#xff1a;批量抓取抖音评论 抖音评论ID提取工具是一款功能强大的软件&#xff0c;可以帮助您批量抓取抖音视频下的评论信息。通过输入关键词和评论监控词&#xff0c;即可进行评论的抓取&#xff0c;并提供评论昵称、评论日期、评论内容、命中关键词以及所…

【CSDN活动】人工智能:前沿科技中的创业机遇与挑战

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 人工智能&#xff1a;前沿科技中的创业机遇与挑战一、AI技术的快速发展与应用拓…