桥接模式(Bridge Pattern)

Bridge Pattern 桥接模式 有时候一个类,可能会拥有多个变化维度。比如奶茶可以选择容量大小、口味风味。容易想到的实现方案是通过继承实现各种组合,但是这样会很容易造成类爆炸。那么有没有什么良策呢?答案就是 Bridge Pattern 桥接模式,其是结构性模式的一种,本文就让我们来了解下该模式 设计模式 模式思想 这里,我们需要构建一个汽车类,我们知道汽车有很多品牌,比如宝马BMW、奔驰Benz。与此同时,汽车的颜色又是五颜六色的,常见的有红、绿、蓝。可以看到在这里对于汽车而言,其存在两个维度——品牌、颜色 阅读详情

将类的功能层次结构与实现层次结构分离

1.基本介绍

将类的功能层次结构和类的实现层次结构连接起来。

类的功能层次结构:

希望增加新的功能,例如有一个Something类,想在其中增加新的功能时,一般会写一个子类,这就构成了类层次结构.为了增加功能而产生的层次结构。

当增加新的功能时,从各个层次中找出符合自己需求的类,以它为父类编写子类,并在子类中增加新的功能。

  • 父类具有基本功能
  • 子类中增加新的功能

在这里插入图片描述

ps: 类的层次结构关系不应该过深。

类的实现层次结构:

抽象类或者接口定义方法,子类去具体实现这些方法,这种层次结构并非用于增加接口.
在这里插入图片描述

  • 父类通过声明抽象方法定义方法.
  • 子类通过具体实现方法实现接口.

类的层级结构的混杂与分离:

当类的层次结构位于一层时,功能层次结构与实现层次结构混在在同一个机构层次中,很容易使类的结构层次变的复杂,也难以透彻的理解类的层次结构。因此,要将类的功能层次与类的实现层次分离开。


2.具体实现

类的一览表:
在这里插入图片描述

程序类图:

在这里插入图片描述

Display类

位于类的功能层次结构最上层。

imp字段中保存的是实现了Display类的具体功能实例,此字段则为类俩个结构层次的桥梁。

/**
 * @author Jay
 * @date 2019/6/4 22:59
 * @description
 */
public class Display {
    /**
     * 桥梁作用
     */
    private DisplayImpl imp;

    public Display(DisplayImpl imp) {
        super();
        this.imp = imp;
    }

    public void open() {
        imp.rawOpen();
    }

    public void print() {
        imp.rawPrint();
    }

    public void close() {
        imp.rawClose();
    }

    public final void display() {
        open();
        print();
        close();
    }
}

CountDisplay类

继承自Display,在其基础上增加了新的功能,类的功能结构层次.

/**
 * @author Jay
 * @date 2019/6/4 23:01
 * @description
 */
public class CountDisplay extends Display {

    public CountDisplay(DisplayImpl imp) {
        super(imp);
    }

    /**
     * 增加的功能
     *
     * @param times
     */
    public void multiDisplay(int times) {
        open();
        for (int i = 0; i < times; i++) {
            print();
        }
        close();
    }
}

DisplayImpl类

类的实现层次结构最上层。

/**
 * @author Jay
 * @date 2019/6/4 23:00
 * @description
 */
public abstract class DisplayImpl {
    public abstract void rawOpen();

    public abstract void rawPrint();

    public abstract void rawClose();
}

StringDisplayImpl类

/**
 * @author Jay
 * @date 2019/6/4 23:02
 * @description 具体实现其中的方法.
 */
public class StringDisplayImp extends DisplayImpl {

    private String string;
    private int width;

    public StringDisplayImp(String string) {
        super();
        this.string = string;
        this.width = string.getBytes().length;
    }

    @Override
    public void rawOpen() {
        printLine();
    }

    @Override
    public void rawPrint() {
        System.out.println("|" + string + "|");
    }

    @Override
    public void rawClose() {
        printLine();
    }

    private void printLine() {
        System.out.print("+");
        for (int i = 0; i < width; i++) {
            System.out.print("-");
        }
        System.out.println("+");
    }
}

Main:测试类

/**
 * @author Jay
 * @date 2019/6/4 23:03
 * @description
 */
public class Main {
    public static void main(String[] args) {
        //接收类型为接口类型,其实现类全部可以使用
        Display d1 = new Display(new StringDisplayImp("hello china"));
        //父类功能
        d1.display();
        System.out.println("************************");
        //子类掉用的父类功能
        Display d2 = new CountDisplay(new StringDisplayImp("hello world"));
        d2.display();
        System.out.println("************************");
        //子类独有功能
        CountDisplay d3 = new CountDisplay(new StringDisplayImp("hello miss"));
        d3.multiDisplay(2);
    }
}

3.角色分析

Abstraction(抽象化)

位于类的功能层次结构最上层使用Implementor角色的方法定义了基本的功能,保存了Implementor的实例。

RefinedAbstraction(改善后的抽象化)

在Abstraction角色的基础上增加了新功能的角色.

Implementor(实现者)

位于类的实现层次结构最上层,定义了实现Abstraction角色的接口方法.

ConcreteImplementor(具体实现者)

具体实现了父类中定义的抽象方法.

在这里插入图片描述


4.思考

分开后容易扩展

将类的功能层次结构与类的实现层级结构分开,有利于独立的对他们进行扩展,要增加功能时,只需在类功能一侧增加功能,不需要对另一侧进行修改,增加的功能都可以被所有的实现所使用.

继承是强关联,委托是弱关联

使用继承容易扩展类,也形成了一种强关联关系,只要不修改代码,变无法改变这种关系,想改变类之间的关系,就可以用委托来代替继承.


To GitHub

SPI 总线信号完整性与时序一致性测试 SPI总线测试的核心目标是验证其电气与时序行为是否满足芯片规格要求,确保通信可靠性 阅读详情

相关推荐

PCIe扫盲(三)

需要特别注意的是,PCIe的Spec中明确规定只有Root有权限发起配置请求(Originate Configuration Requests),也就是说PCIe系统里面的其他设备是不允许去配置其他设备的配置空间的,即peer-to-peer的配置请求是不允许的。当配置请求进行BDF路由的时候,正是依靠这些信息来确定要找的设备的。前面的文章还介绍过,Root和Switch的每一个端口中都包含一个P2P桥,并且知道桥的配置空间头(Configuration Space Header)是Type1型的。

Liuqz2009的专栏 2404

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

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

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

SpringCloud 2025王炸更新!GraalVM原生镜像启动速度提升90%实战

在当今云原生和Serverless架构盛行的时代,应用的启动速度已成为衡量技术栈竞争力的关键指标。传统SpringCloud应用由于依赖JVM的动态类加载、反射等机制,启动时间通常超过30秒,在Kubernetes滚动更新和函数计算场景下成为显著性能瓶颈。2025年,SpringCloud迎来里程碑式更新,通过深度集成GraalVM原生镜像技术,实现了启动速度提升90%的惊人突破,让SpringCloud应用正式进入"秒级启动"时代。

小筱在线博客 1100

桥接模式(Bridge)

桥接(Bridge)模式

weixin_43956958的博客 2万+

Ansys Zemax与Speos协同设计:从HUD光学优化到驾驶环境可视化全流程解析

本文深入解析了如何利用Ansys Zemax与Speos进行协同设计,实现从HUD光学系统核心优化到驾驶环境可视化验证的全流程。文章强调了HUD设计是光学性能与视觉感知的深度耦合,通过Zemax进行精密光学设计,再利用Speos进行系统级仿真与感知模拟,最终完成从虚拟到现实的闭环验证,有效提升HUD产品的开发效率与可靠性。

weixin_29199873的博客 250

基于verilog的16QAM调制

思路1:正交调幅法——实现16QAM调制,可以理解为时相位相差90度的两个正弦波的4PAM叠加。 4比特输入经过2->4进制转化得到两路2比特输入,然后分别经过4PAM后叠加所得输出即为16QAM调制结果。 具体程序稍后编写。 思路2:复合相移法——可以借助前面编写的QPSK,相当于两路幅度不同的QPSK的叠加,比如幅度分别取1和3 。 思路1正交调幅法的设计方案: 两正弦波相位差...

weixin_30725467的博客 2929

设计模式-桥接模式(Bridge)

桥接模式,也被称为柄体(Handle and Body)模式或接口(Interface)模式,是一种桥接模式,也被称为柄体(Handle and Body)模式或接口(Interface)模式,是一种结构型设计模式。它的主要目的是将抽象部分与它的实现部分分离,使它们都可以独立地变化。这种分离可以通过组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。举个例子,假设有一个几何形状Shape类,从它能扩展出两个子类:圆形Circle和方形Square。

miaoyl的博客 1万+

通过python下载西门子技术中心文档

本篇文章纯粹记录如何下载通过python下载西门子技术中心文档,所下载文档完全自己学习使用,非商业用途

John_09040211的博客 561

设计模式【6】——桥接模式(Bridge 模式)

在开发过程中大家肯定都遇到过这样的问题:1)客户给了你一个需求,于是使用一个类来实现(A);2)客户需求变化,有两个算法实现功能,于是改变设计,我们通过一个抽象的基类,再定义两个具体类实现两个不同的算法(A1 和 A2);3)客户又告诉我们说对于不同的操作系统,于是再抽象一个层次,作为一个抽象基类A0,在分别为每个操作系统派生具体类(A00 和 A01,其中 A00 表示原来的类 A)实现不同操作系统上的客户需求,这样我们就有了一共 4 个类。

sinat_42974726的博客 1317

不用SE63逐个翻译!ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量处理TCODE描述的3种姿势

本文介绍了三种利用ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量翻译SAP事务码(TCODE)描述的高效方案,旨在替代SE63逐个翻译的低效操作。内容涵盖从基础循环、Excel导入到全自动程序集成的实现方法,帮助开发者显著提升批量翻译效率,并深入解析了SAP翻译体系的核心原理与实战技巧。

weixin_42593130的博客 660

nature子刊:MCNN基于电池故障诊断的模型约束的深度学习方法

本研究提出了一种基于模型约束神经网络(MCNN)的锂离子电池在线故障诊断方法,整合物理模型与深度学习,有效解决了随机工况下传统方法诊断精度低、依赖故障样本等问题。通过统计修正电池包模型和双向LSTM网络,实现了电池状态的高精度预测(平均RMSE 3.9%),并设计模型耦合自动编码器提取可解释特征。在包含18.2百万条真实车辆数据的验证中,该方法故障检测TPR在FPR=0.1时达85%,较基准方法提升超46.5%,且能提前30分钟预警内部短路等故障。研究还展示了算法在跨电池包结构迁移中的优越性,为工业应用提供

hasakie的博客 1758

中国移动光猫桥接模式

进光猫后台 将连接类型改为Bridge 桥接类型改为ip bridge,不要使用pppoe bridge 保存即可 路由器进行pppoe拨号 ipv6通告:服务器模式 ndp:服务器模式 dhcpv6:服务器模式 无状态(主要为了安卓机型获取ipv6) 保存即可 ...

wang805447391的博客 1万+

量化交易 米筐 案例:市值因子选股策略

案例:市值因子的选股策略 1.结果 获得超额收益 年化 49% 2. 从股票中选择市值小的股票 选定财务数据筛选 进行每日调仓(多因子选股调仓 周期频率会小一些) 3. 代码 估值有关指标 # 在沪深300股票中,选出市值比较小的10只股票 # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。 def init(context): # 沪深300组合 stocks = index_components('000300.XSHG') # 沪深3

廷益_飞鸟的博客 2313

桥接模式 Bridge Pattern

的理解出了问题。

DachuiLi的博客 1071

WINCC7.3破解文件

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

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

23种设计模式——桥接模式 (Bridge Pattern)详解

本文介绍了23种经典设计模式之——桥接模式(Bridge Pattern)的使用及说明

Meteors.的博客 1225

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

桥接模式Bridge Pattern

使它们都可以独立地变化对象结构型模式。

Resurgence03的博客 912

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++ 桥接模式 (Bridge Pattern)

flyfish

二分掌柜的 1700

桥接模式(Bridge Pattern)-(最通俗易懂的案例)

1.定义 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。 问题: 这里的抽象与实现是什么意思呢?先来看一个例子: 假如你有一个几何形状Shape类,从它能扩展出两个子类: ​ 圆形Circle和 方形Square 。 你希望对这样的类层次结构进行扩展以使其包含颜色,所以你打算创建名为红色Red和蓝色Blue的形状子类。 但是, 由于你已有两个子类,...

世银的博客 3万+

桥接模式(Bridge Pattern)

桥接模式将抽象部分与实现部分分离,让它们都可以独立地变化。这种模式在软件设计中非常有用,特别是在处理具有两个或多个独立变化维度的类型时。通过桥接模式,我们可以将这些类型分解成多个较小的类,这些类可以更容易地进行扩展和维护。

猪猪 533

设计模式-桥接模式-bridge pattern

桥接模式(Bridge Pattern)是一种结构性设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。这种模式通过定义一个桥接接口,将实现的类和抽象的类解耦,从而能够独立地扩展抽象类和实现类。抽象(Abstraction):扩展抽象(Refined Abstraction):实现化(Implementor):具体实现化(Concrete Implementor):首先,定义实现化接口: 接着,创建具体的实现化类: 然后,定义抽象类: 接着,扩展抽象类: 最后,客户端代码使用桥接模式: 1.3.

wesigj的博客 2823

JAVA设计模式之 桥接模式【Bridge Pattern】

一、概述 将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式。二、适用场景 处理多维度变化。 业务场景:某功能为将数据库中的数据转换成多种文件格式,例如txt、xml、pdf等格式,同时需要支持多种不同类型的数据库的读取。便可使用桥接模式对其进行设计。 这里的维度有两个 分别为:不同的文件格式

小吕丶Code阶区 5241
上一篇: 原型模式(Prototype Pattern)
下一篇: 状态模式(State Pattern)
苹果先生Jay
博客等级 码龄9年 1粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值