Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >三分钟理解“桥接模式”——设计模式轻松掌握

三分钟理解“桥接模式”——设计模式轻松掌握

作者头像
大闲人柴毛毛
发布于 2018-03-09 03:46:36
发布于 2018-03-09 03:46:36
1.1K0
举报
文章被收录于专栏:大闲人柴毛毛大闲人柴毛毛

什么是桥接模式?

将两个继承体系使用聚合/组合连接在一起,这就是桥接模式。

桥接模式的类图

桥接模式中,最大的特色就中两个继承体系中间的那座桥(聚合/组合)。

桥接模式中有两个继承体系,分别称为“抽象”和“实现”;

抽象类中持有实现类的引用,并且含有set函数用于给用户设置这个抽象类的实现;

当给抽象类的对象设置完实现类对象之后,用户就可以通过抽象类的对象访问实现类对象中的函数及变量了。

实际问题

请用继承体系表示以下事例:

老式手机由于操作系统不一致,因此不同厂家在生产完手机之后还得为该手机定制软件,也就是每个厂家生产的软件不能跨平台使用。

类图如下所示:

这种继承体系存在弊端:

此时如果要增加一种手机品牌,就还要为该品牌增加所有的软件类;

如果还要增加一种软件,就需要为所有品牌的手机增加新的软件类;

也就是说,目前这个继承体系的类分为两种类型,一种是手机品牌类,一种是手机软件类;不管增加哪种类型的类,都会导致要同时增加多个类,这样下去会导致继承体系过于庞大。

出现这种弊端的根本原因如下:

多种类别的类都存在于一个继承体系中,这样就会导致当增加一种功能时会相应增加多个类,而且有许多类之间功能大都相似。

解决办法:

将一个继承体系中的多种类型的类分成单独的继承体系,然后使用聚合/组合将这两个继承体系连接在一起。

这样当需要增加类时,由于新的类属于一个单独的继承体系,因此只需要在某一个继承体系中增加一个子类即可,从而避免了继承体系过于庞大的问题。

而这种将一个继承体系分成两个用组合/聚合方式连接的继承体系的方式就称为“合成/聚合复用原则”。

此时,如果需要增加一个类,只需要在一个继承体系中增加一个子类即可,无需增加好多类,从而继承体系不会异常庞大。

知识点扫盲——————————————————————————

什么是“合成/聚合复用原则”?

在程序设计时,应尽量使用合成/聚合,而尽量避免使用继承!

什么是“合成”与“聚合”?

聚合:在类A的成员变量中含有类B的对象的引用,但类B的成员变量中没有类A的对象的引用,则A和B的关系称为聚合,聚合是一种“弱拥有”的关系。

合成:在类A的成员变量中含有类B的对象的引用,但类B的成员变量中没有类A的对象的引用,并且A、B对象的生命周期必须一致,也就是类A的构造函数中要为成员变量B创建对象。因此,合成是一种强引用关系。

继承的缺点:

由于对象的继承关系是在编译时就定义好了,因此无法在运行时改变子类中从父类继承过来的实现。

并且子类的实现与父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类变化的发生。

当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。

这种依赖关系限制了灵活性,并最终限制了复用性。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年09月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
设计模式之桥接模式
结构型模式之桥接模式 桥接模式是一种很实用的结构型设计模式,如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,故名桥接模式。 桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联取代了传统的多层继承,将类之间的静态继承关系转换为动态的对象组合关系,使得系统更加灵活,并易于
爱撒谎的男孩
2018/05/25
4400
设计模式(七):桥接模式
设计模式(七):桥接模式
Java架构师必看
2021/05/14
2420
设计模式 -- 桥接模式
某公司准备开发一个跨平台图像浏览系统,要求可以显示JPG、PNG等多种格式图片,并且能够在Windows、Linux等多个操作系统上运行
xy_ss
2023/11/22
1960
设计模式 -- 桥接模式
设计模式之桥接模式
Jungle有两个手机,分别是M手机和N手机,M手机上有游戏Game1,N手机上有Game2。每次Jungle想玩Game1时,就使用M手机,想玩Game2时,就玩N手机。要是某天Jungle外出,心情大好,两个游戏都想玩,那Jungle还得带上两个手机???麻不麻烦?
用户6557940
2022/07/24
3010
设计模式之桥接模式
设计模式——桥接模式
设计模式——桥接模式
Java架构师必看
2021/05/14
5360
设计模式——桥接模式
大话设计模式C++实现-第22章-桥接模式
什么叫抽象与它的实现分离,这并非说。让抽象类与其派生类分离。由于这没有不论什么意义。实现指的是抽象类与它的派生类用来实现自己的对象。
全栈程序员站长
2022/07/10
2680
大话设计模式C++实现-第22章-桥接模式
用C++跟你聊聊“桥接模式”
桥接模式,号称设计模式中最抽象的一个,不是吹出来的啊。且看我能不能讲清楚啊。 这时候就体现出小故事的重要性了,这也是我为什么每篇设计模式都要先讲个小故事,便于理解记忆嘛。
看、未来
2020/08/26
4180
用C++跟你聊聊“桥接模式”
PHP设计模式之桥接模式
桥接模式,在程序世界中,其实就是组合/聚合的代名词。为什么这么说呢?熟悉面向对象的我们都知道继承的好处,子类可以共享父类的很多属性、功能。但是,继承也会带来一个问题,那就是严重的耦合性。父类的修改多少都会对子类产生影响,甚至一个方法或属性的修改都有可能让所有子类都去修改一遍。这样就违背了开放封装原则。而桥接就是为了解决这个问题,它强调的是用组合/聚合的方式来共享一些能用的方法。相信大家一定想到了php中的trait,如果你在工作中使用过这个特性,那么你就已经用过桥接模式了!
硬核项目经理
2019/10/24
5850
设计模式实战-桥接模式,想做月老吗?
桥接模式 (Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体 (Handle and Body) 模式或接口 (Interface) 模式。
架构师修炼
2020/07/17
4650
设计模式-桥接模式(诺基亚:我觉得我还能抢救下)
需求:对不同手机类型的不同品牌(比如按键手机:诺基亚、翻盖手机:纽曼、智能手机:华为、小米)实现操作编程(比如: 开机、关机、打电话)。
唔仄lo咚锵
2022/05/08
2590
设计模式-桥接模式(诺基亚:我觉得我还能抢救下)
【设计模式】设计模式总结 ( 七大设计原则 | 创建型模式 | 结构型模式 | 行为型模式 ) ★★★
开闭原则 是 面向对象 设计 中 , 最基础的 设计原则 , 它指导我们建立稳定灵活的系统 ;
韩曙亮
2023/03/29
1.4K0
【设计模式】设计模式总结 ( 七大设计原则 | 创建型模式 | 结构型模式 | 行为型模式 ) ★★★
Gof23设计模式趣味详解(三分钟上手系列)
学习设计模式可以提高程序员的思维能力、编程能力和设计能力,从而使你写的代码可重用性更高、可读性更强、可靠性更高、灵活性更好、可维护性更强
bboy枫亭
2020/09/22
4050
【Java设计模式】013-桥接模式
桥接(Bridge)模式:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。
訾博ZiBo
2025/01/06
820
23设计模式之 ---------桥接模式
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
默 语
2024/11/20
1020
23设计模式之 ---------桥接模式
简说设计模式——桥接模式
既然面对上述传统解决方案是有弊端所在那我们如何去解决呢?现在就可以用到了本次的主题【桥接模式】
@派大星
2023/06/28
3340
简说设计模式——桥接模式
[设计模式]之六:桥接模式
这个原则的好处是,优先使用对象的合成/聚合将有助于你保持每个类被封禁,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。
wOw
2018/09/18
4130
[设计模式]之六:桥接模式
面向对象设计的设计模式(九):桥接模式
定义解读:桥接模式的核心是两个抽象以组合的形式关联到一起,从而他们的实现就互不依赖了。
用户2932962
2019/04/25
6870
面向对象设计的设计模式(九):桥接模式
23种设计模式之桥接模式
桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。
Java技术债务
2022/09/26
2240
23种设计模式之桥接模式
05-02-设计模式 桥接模式
现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等),如图:
彼岸舞
2022/05/28
1850
05-02-设计模式 桥接模式
详解设计模式:桥接模式
桥接模式(Bridge Pattern)也称为桥梁模式、接口模式或者柄体模式,有点像适配器模式,也是 GoF 的 23 种设计模式中的一种结构型设计模式。
栗筝i
2022/12/02
1.3K0
详解设计模式:桥接模式
推荐阅读
相关推荐
设计模式之桥接模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档