bridge模式-结构型模式

8.设计模式--桥接模式(Bridge模式) 1.定义  桥接模式是一种结构型模型,现实生活中桥就是连接在河两端方便通行的建筑。  而桥接模式则是对类的功能层次结构和类的实现层次结构中间实现的一个桥梁。类的功能层次结构  所谓类的功能层次结构就是对类进行继承后进行的功能扩展,例如Car(车类),所有车都有启动和停止方法以及转弯等方法。但是现在我有一个特殊的车需要在Car车类的基础上加一个倒车影像功能,此时只需要继承Car类再自己的类中加一个倒车影像即可,此时就是类的功能层次结构。类的实现层次结 阅读详情

何时使用bridge模式:

从设计模式书上的得知较多的应用场景有:

1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。(一个对象的抽象对应多个行为)

2.类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对他们进行扩充(多个抽象与多个行为对应时且可以互相配对).

3.对一个抽象的实现部分的修改应对客户不产生影响,既客户的代码不必重新编译.

 

 

上面的描述中产生了两个概念,对象的抽象和对象的行为,什么是抽象,什么是行为?

答:个人认为抽象是一个很有高度的描述,比如领导说我要那块土地做开发,这就是抽象,因为他并没有说明是怎么拿下那块土地,拿土地

可以抢回来,偷回来,买回来,逼人行贿送过来等各种方法皆可,具体的实施就是行为。上述的案例如果领导只要一块土地,或者说领导规定只

要是土地都给我抢回来(黑社会老大0-0),那么也就不需要bridge模式了,直接绑定死抽象和行为既可,代码量也会简单很多,但是如果领导

没有规定死拿土地的行为,今天拿这块地是买的,明天拿那块地偷的,后天拿那块地是别人行贿过来的,那么这时候就适用适用桥接模式了,适

用上面所述的场景1。

 

在来一个煮咖啡的例子,假设我要煮一杯咖啡,但是咖啡种类有很多,有黑咖啡,卡布奇诺,拿铁,同时咖啡还有中杯,大杯,小杯之分。

所以这些组合起来就有大杯黑咖啡,大杯卡布奇诺,中杯拿铁.....如果抽象和行为绑定死,那么就需要根据不同的组合写不同的子类来实现了,

这是一件很痛苦的事,因此利用bridge模式的概念,首先抽象部分可以分离出我要一杯大杯咖啡,我要一杯中杯咖啡,我要一杯小杯咖啡。行为

方面自然是煮咖啡给客户咯,不同种类的咖啡有不同的材料和不同的煮法,这就是分离出来的行为,这样我们就可以任意组合抽象和行为之间提

供给客户合心意的咖啡。

 

代码实例:


 

package com.gof.chapter4.bridge.simple;

/**

 * 咖啡的抽象类,其子类主要用来描述是要大杯咖啡,小杯咖啡还是中杯

 * 咖啡

**/

public abstract class Coffee {

CoffeeImp coffeeImp;

public void setCoffeeImp(CoffeeImp _coffeeImp){

this.coffeeImp = _coffeeImp;

}

public CoffeeImp getCoffeeImp(){return this.coffeeImp;}

public abstract void makeCoffee();

}

 

 

 

package com.gof.chapter4.bridge.simple;

/**

 * 煮咖啡的抽象类

 */

public abstract class CoffeeImp {

public abstract void makeCoffeeImp();

}


--------------------------------------分割线,描述大杯,中杯的实现类---------------------
package com.gof.chapter4.bridge.simple;
public class MediumCoffee extends Coffee{
public MediumCoffee(CoffeeImp _coffeeImp){this.setCoffeeImp(_coffeeImp);}
@Override
public void makeCoffee() {
System.out.print("我要煮一杯中杯的-");
this.getCoffeeImp().makeCoffeeImp();
}
}

package com.gof.chapter4.bridge.simple;
public class SuperSizeCoffee extends Coffee {
public SuperSizeCoffee(CoffeeImp _coffeeImp){this.setCoffeeImp(_coffeeImp);}
@Override
public void makeCoffee() {
System.out.println("我要煮一杯大杯的-");
this.getCoffeeImp().makeCoffeeImp();
}
}


-------------------------------煮咖啡的实现类----------------------------------------------
package com.gof.chapter4.bridge.simple.imp;
import com.gof.chapter4.bridge.simple.CoffeeImp;
public class BlackCoffee extends CoffeeImp {
@Override
public void makeCoffeeImp() {
System.out.println("黑咖啡!");
}
}

package com.gof.chapter4.bridge.simple.imp;
import com.gof.chapter4.bridge.simple.CoffeeImp;
public class Cappuccino extends CoffeeImp {
@Override
public void makeCoffeeImp() {
// TODO Auto-generated method stub
System.out.println("卡布奇诺.");
}
}
package com.gof.chapter4.bridge.simple.imp;
import com.gof.chapter4.bridge.simple.CoffeeImp;
public class Latte extends CoffeeImp{
@Override
public void makeCoffeeImp() {
// TODO Auto-generated method stub
System.out.println("拿铁咖啡!");
}
}
---------------------------------客户端测试类------------------------------------------------
package com.gof.chapter4.bridge.simple;
import com.gof.chapter4.bridge.simple.imp.*;
public class Client {
public static void main(String[] ben){
Coffee coffee = new MediumCoffee(new Cappuccino());
coffee.makeCoffee();
coffee.setCoffeeImp(new BlackCoffee());
coffee.makeCoffee();
coffee.setCoffeeImp(new Latte());
coffee.makeCoffee();
}
}
输出结果为:
我要煮一杯中杯的-卡布奇诺.
我要煮一杯中杯的-黑咖啡!
我要煮一杯中杯的-拿铁咖啡!
结语:写到这里我有想到了一个关于bridge模式有趣的地方。首先总结下bridge模式的参与者:
  • Abstraction(比如上述例子中的Coffee)--定义抽象类的接口。--维护一个指向Implementor类型对象的指正.
  • RefinedAbstraction(比如上述例子的SuperSizeCoffee) -- 扩充由Abstraction定义的接口
  • Implementor(比如上述例子中的CoffeeImp) -- 定义实现类的接口,该接口不一定要与Abstraction的接口完全一致;事实上这两个接口可以完全不同。一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作.
  • ConcreateImplementor(比如上述例子中的Cappuccino) -- 实现Implementor接口并定义它的具体实现.

我所说的有趣的事是我们可以把Abstraction理解为定义了一个公司经理应该做的事情,而RefinedAbstraction则是对应各个级别经理他们具体做的事,而Implementor则定义了一个公司员工该做的事,ConcreateImplementor则定义了各个员工具体做的事。所以说领导说的话都是抽象的- -~~~好吧顺便吐槽下,抽象的东西永远不会错,所以说领导说的永远不会错,只有下面的人理解错了,做错了,悲剧啊。

 

 

最后PS下:如果对象的产生复杂或者节省内存开销可以使用到factory模式和singleton模式。这个具体自己想吧......



 



 

设计模式(六)桥连模式Bridge(结构型) 设计模式(六)桥连模式Bridge(结构型) 1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度? 例子1:设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、............... 阅读详情

相关推荐

ESP32-C5 Wi-Fi CSI感知技术原理与工程实践

Wi-Fi信道状态信息(CSI)是OFDM系统中反映多径信道特性的复数频域响应,源于导频子载波的信道估计过程,本质属于物理层原始观测数据。其高维度(如56子载波)、高时间分辨率(百赫兹级采样)及零硬件增益的特性,使其成为无感人体感知的理想信号源。相比UWB或毫米波雷达,CSI方案依托现有Wi-Fi基础设施,兼具成本优势与部署灵活性,广泛应用于呼吸监测、跌倒检测、手势识别等边缘智能场景。乐鑫ESP32-C5通过5.8GHz低噪接收、亚纳秒级多天线同步与固件级CSI增强,显著提升微动感知鲁棒性,结合AGC锁定、

weixin_42153793的博客 343

8.Bridge 桥接模式(结构型模式)

桥接模式意图定义:将抽象部分与它他的实现部分解耦,使得两者都能够独立变化。思考问题:一个变化是平台(抽象B)的变化,另一个变化是型号(实现细节b)的变化。【3】【抽象B】==相对稳定,也可能变化 【实现细节b】==频繁变化。软件加上时间轴,随着时间的变化,动态的创作软件系统。【实现细节b】各种实际实现通过继承来实现。【2】抽象A==>抽象B实现细节b。【4】抽象B 不稳定?

zhangyangyangx的博客 405

Cisco Packet Tracert 无线路由器配置

Cisco Packet Tracert 无线路由器配置

yushan_caoyu的博客 2万+

【设计模式——学习笔记】23种设计模式——桥接模式Bridge(原理讲解+应用场景介绍+案例介绍+Java代码实现)

讲解桥接模式的思想,介绍其常见的应用场景,举例说明桥接模式的实现方式

我只管埋头前行,剩下的交给时间。 3291

[NVME] CMBLOC-Controller Memory Buffer Location

CMBLOC-Controller Memory Buffer Location

jinyuya的博客 990

实用电路精讲系列---快速精密桥式放大器电路

快速精密桥式放大器通过惠斯通电桥转换物理量为差分信号,经仪表放大器精密放大,具有高共模抑制、低噪声和宽带宽特性。其核心包含:电桥传感器转换、仪表放大器信号调理(增益可调、温漂补偿)、输出级适配ADC。典型应用包括智能断路器监测、胎压检测、电池安全预警等10大领域,需注意传感器-放大器-ADC最短路径布局。实用电路采用LT1057S和LT1010构建,实现稳定供电、差分处理、功率放大和桥式驱动,满足高精度、快速响应需求。该技术在工业控制、医疗设备等领域具有重要价值。

weixin_40590799的博客 1415

Bridge模式(桥接模式 结构型)

Bridge是设计模式中比较复杂和难以理解的模式之一,即使用组合的方式将抽象和实现彻底地解耦,这样的好处是抽象和实现可以分别独立地变化,系统的耦合性也得到了很好的降低。 这句话太精简,以至于我很难知道它在说什么…… 我觉得这么说更恰当,bridge使用组合的方式,使(抽象A类)和(A类的组成部分抽象B类)的实例化彻底地解耦。这样说我觉得是最贴切的。 举个栗子。 我想要创作一个笔类,那么做为

darren‘s blog 1074

基于STM32H5的循环GPDMA链表使用

STM32H503的GPDMA链表模式可实现灵活的数据传输。相比传统DMA直接编程方式,链表模式通过配置多个节点实现分散数据传输,支持循环链表功能。示例展示了如何使用GPDMA链表实现UART1循环发送数据:配置两个DMA节点分别指向不同发送缓冲区,构建循环链表并绑定到DMA通道。关键点包括:清空链表结构体、正确设置循环模式、检查节点配置。此方法提高了DMA使用的灵活性,适用于需要交替传输多段数据的场景。

kevin1499的博客 451

桥接模式(Bridge模式)详解

在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难。 当然,这样的例子还有很多,如不同颜色和字体的文字、不同品牌和功率的汽车、不同性别和职业的男女、支持不同平台和不同文件格式的媒体播放器等。如...

傅红雪的专栏 5284

玩转Docker小游戏项目系列:Docker部署魔塔网页经典小游戏

玩转Docker小游戏项目系列:Docker部署魔塔网页经典小游戏

jks212454的博客 1063

家人们,谁懂啊,dify又报错了:[models] Bad Request Error, 500 Server Error:Internal Server Error for url: http://

本来今天下班,坐在地铁上,一身劳累。一起上班的小兄弟儿,突然甩来一张截图:老大!dify又报错了。没办法,一到家就打开电脑,开始排查。

xiezhipu的博客 882

Bridge模式——结构型模式

<br /><br /> <br />tank.h<br />#ifndef _TANK_H_ #define _TANK_H_ class TankImpl; class Tank { public: virtual ~Tank(); virtual void shot()=0; virtual void run()=0; protected: Tank(); }; class ChinaTank:public Tank { public: ChinaT

piaojun_pj的专栏 1884

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

六种结构型设计模式(Proxy、Flyweight、Facade、Bridge、Decorator、Adapter),并以 Adapter 模式为典型案例

🔹 **继承表达的是“is-a”关系**(强语义、紧耦合),应仅用于真正存在自然分类层级的场景(如 `Dog is-a Animal`); 🔹 **组合表达的是“has-a”或“uses-a”关系**(弱语义、松耦合),更贴近现实协作逻辑(如 `Adapter uses-an Adaptee`)。 Adapter 模式本质是**协作而非泛化**:Adapter 并非 Adaptee 的一种,而是“使用 Adaptee 来满足 Target 接口”,因此组合在语义上更准确、更安全、更可演进。

[Blog][Domain] programb.blog.youkuaiyun.com 1031

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

6中结构型设计模式的对比理解(Composite组合模式,Proxy代理模式,Flyweight享元模式,Facade门面模式,Bridge桥接模式,Decorator装饰器模式)

6中结构模式的对比和理解。这些模式中都使用了同一个例子,这样可以更好的理解这些模式所做的事情。

zheyangyebuxingaaa的博客 1096

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C++结构型模式之桥接(Bridge )模式

Bridge 是设计模式中比较复杂和难理解的模式之一, 也是 OO 开发与设计中经常会用到的模式之一。 使用组合( 委托) 的方式将抽象和实现彻底地解耦, 这样的好处是抽象和实现可以分别独立地变化,系统的耦合性也得到了很好的降低。而这里的“实现” 的含义指的是怎么去实现用户的需求, 并且指的是通过组合(委托) 的方式实现的, 因此这里的实现不是指的继承基类、实现基类接口,而是指的是通过对象组合实现用户的需求。

yangxueyangxue的博客 1554

结构型模式之Bridge模式

1、意图 将抽象部分与实现部分分离,使它们都可以独立地变化 2、适用性 以下一些情况使用Bridge模式 (1)你不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为在程序运行时刻实现部分应可以被选择或者切换。 (2)类的抽象以及它的实现部分都应该可以通过生成子类的方法加以扩充。这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。

多看多听多总结 828

结构型模式 - 桥接模式Bridge

桥接模式又被称为:柄体(Handle and Body)模式和接口(Interfce)模式.

青衫磊落长歌行的博客 810

设计模式(结构型——Bridge模式)

设计模式四、Bridge模式4.1 Bridge模式的概念4.2 Bridge模式的实现 四、Bridge模式 4.1 Bridge模式的概念 使用场景 涉及多个维度上的剧烈变化,将各个维度解耦 例如,游戏中的坦克模型,在型号维度上可以有较大变化,在游戏运行平台上也可以有较大变化,PC端、手机端、TV端等 体现设计模式的原则——合成复用 少用继承,多用组合 若用继承的方式,会将不同维度的变化强烈耦合在一起 4.2 Bridge模式的实现 通过聚合的方式,将多个维度的变化组合在一起 pu

qq_37112587的博客 285

(C++设计模式) ------Bridge模式-- 结构型模式

(C++设计模式) ------Bridge模式-- 结构型模式         设计模式的学习是一个循序渐进的过程,每一个设计师都是在套用这几种设计模式来实现自己的软件构架,很多都是融合会贯通的,一个设计模式中不仅仅是用到一种,所以要灵活运用这些设计模式。理解了设计模式对设计和代码的阅读都有很大的好处!! 今天我们学习结构性模式Bridge模式。

@奮 鬥@的专栏 1221

结构型模式之桥接BRIDGE

推荐先看《敏捷开发:原则、模式与实例》了解基本开发原则一、意图将抽象部分同其实现部分分离开来,使其可以独立变化。二、图解 上图为了实现多平台应用,使用继承分别定义了X平台和PM平台的两个window子类。当我们添加一个IconWindow子类用于处理图标时,为了支持X和PM平台,我们又不得不实现两个新类XIconWindow和PMIconWindow,而且二者所用代码可能与原来Xwindow和PM

心之所向 428

【设计模式】结构型模式-Bridge模式

功能 将抽象部分与实现部分分离,使它们都可以独立的变化 解决 主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活 何时使用:实现系统可能有多个角度分类,每一种角度都可能变化 如何解决:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合 关键代码:抽象类依赖实现类 优缺点 优点: 抽象和实现的分离 优秀的扩展能力 实现细节对客户透明 缺点:增加系统的理解...

zfprotectors的博客 140

BRIDGE(桥接)—对象结构型模式

桥接模式【bridge】 什么是桥接模式 将抽象部分于它的实现部分分离,使它们都可以独立地变化,这个摘自<设计模式>的解释,一般很难去理解,稍后我会以代码加文字的形式给大家解释清楚。 什么场景会用到桥接模式 现在给大家一个场景,比如现在要做这样一个功能,需求上描述,分别开发多个软件应用,同时需要适应不同的手机型号,再详细一点,比如,现在开发了一款购物app和阅读app,需要兼容...

bas_ball的专栏 333

结构型模式之桥接模式bridge

桥接模式bridge 用于商城系统中商品的分类 1.可以用多层继承结构实现,如: 缺点:扩展性不好,不推荐使用 违反单一职责原则 2.使用桥接模式:扩展性强,可以修改任意一个维度 /** * 品牌 * @author Administrator * */ public interface Brand { void sale(); } class Lenovo implements ...

weixin_43319635的博客 243

【设计模式】结构型模式之桥接Bridge

**桥接Bridge**是一种对象结构型设计模式,意在将抽象部分与它的实现部分分离,使它们都可以独立地变化。 Bridge模式的结构如下图所示: 上图中,Abstraction定义抽象类的接口,维护一个指向Implementor类型对象的指针;RefinedAbstraction扩充由Abstraction定义的接口;Implementor定义实现类的接口,该接口不一定要与Abstr

Making Life Better. Making Others Better. 889
上一篇: Singleton-对象创建型模式
下一篇: facade模式--结构型模式
ben_gmail
博客等级 码龄18年 15粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值