设计模式与实例代码:Bridge模式

设计模式:Bridge模式 如果你想要写一个游戏,并且想让这个游戏同时支持PC和手机,那么怎么样的设计可以避免写两套代码,并且不影响可扩展性呢?说起来还是比较简单的,只要把对平台的依赖部分抽取成抽象的接口(比如说绘图部分),并且针对抽取出来的接口,分别实现PC版和手机版就行了。系统的其他部分只要调用那套抽取出来的接口就可以完成所有的功能。这样来看,系统的其他部分是不依赖具体的平台的,也就具有了良好的扩展性。这个就是Bridge模式的应用。 阅读详情

意图/定义:将一组实现与另一组使用它们的对象分离,使得各自可以独立变化

问题:一个抽象类的多个派生类必须使用多个实现,但不能出现类爆炸

解决方案:为所有实现定义一个接口,供抽象类的所有派生类使用

参与者与协作者:抽象类的具体实现使用实现类的派生类,却无需知道自己使用的是具体哪个实现

效果:实现与使用实现的对象被解耦,提供了可抿生,客户对象无需操心实现问题

实现:将实现封装在一个抽象类后,在要实现的抽象基类中饭盒个实现的引用。


桥接模式是一个比较重要的结构性的设计模式,其结构十分类似于策略模式,与之不同之处在于抽象类之下的各种具体抽象是可以使用多种实现。

举一个不太适当的现实中的例子,以交通工具作为左边的抽象,不同的交通工具如汽车、卡车作为抽象的派生,不同类型的交通工具都需要发动机来驱动,但发动又有不同的品牌,因此交通工具就可以与发动机解耦,各自进行独立的变化。具体结构代码参见下表。

using System;

namespace Bridge
{
    /// <summary>
    /// MainApp startup class for Structural
    /// Bridge Design Pattern.
    /// </summary>
    class MainApp
    {
        /// <summary>
        /// Entry point into console application.
        /// </summary>
        static void Main()
        {
            Abstraction car = new car();

            // Set implementation and call
            car.Implementor = new ConcreteImplementorA();
            car.drive();

            // Change implemention and call
            car.Implementor = new ConcreteImplementorB();
            car.drive();

            Abstraction truck = new truck();

            // Set implementation and call
            truck.Implementor = new ConcreteImplementorA();
            truck.drive();

            // Change implemention and call
            truck.Implementor = new ConcreteImplementorB();
            truck.drive();


            // Wait for user
            Console.ReadKey();
        }
    }

    /// <summary>
    /// The 'Abstraction' class
    /// </summary>
    class Abstraction
    {
        protected Implementor implementor;

        // Property
        public Implementor Implementor
        {
            set { implementor = value; }
        }

        public virtual void drive()
        {
            implementor.drive();
        }
    }

    /// <summary>
    /// The 'Implementor' abstract class
    /// </summary>
    abstract class Implementor
    {
        public abstract void drive();
    }

    /// <summary>
    /// The 'RefinedAbstraction' class
    /// </summary>
    class car : Abstraction
    {
        public override void drive()
        {
            implementor.drive();
        }
    }

    class truck : Abstraction
    {         
        public override void drive()
        {
            implementor.drive();
        }    
    }

    /// <summary>
    /// The 'ConcreteImplementorA' class
    /// </summary>
    class ConcreteImplementorA : Implementor
    {
        public override void drive()
        {
            Console.WriteLine("ConcreteImplementorA drive");
        }
    }

    /// <summary>
    /// The 'ConcreteImplementorB' class
    /// </summary>
    class ConcreteImplementorB : Implementor
    {
        public override void drive()
        {
            Console.WriteLine("ConcreteImplementorB drive");
        }
    }
}
【设计模式】Java 设计模式之桥接模式(Bridge) 本文概述了桥接设计模式的核心原理和应用场景。桥接模式通过分离抽象部分和实现部分,使得两者能够独立变化,从而提升了系统的灵活性和可扩展性。它特别适用于那些需要在多个维度上进行变化,或者要求抽象和实现独立演进的场景。实现桥接模式时,需明确抽象与实现的关系,设计稳定的抽象接口,并保持实现细节的独立性。尽管桥接模式可能增加系统的复杂性并带来一定的性能损失,但其带来的灵活性通常能够弥补这些不足。展望未来,桥接模式将继续在软件开发中发挥重要作用,结合其他技术和设计模式,共同构建高效、灵活且可靠的系统架构。 阅读详情

相关推荐

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

软考中级-软件设计师 桥接模式

片言可决讼,半纸能缚龙 1842

设计模式——桥接模式(附代码示例)

一. 传统方法 以对不同类型(折叠式、直立式、旋转式)不同品牌(华为、小米、vivo)的手机操作为例 1. 类图 2. 传统方式问题分析 扩展性问题(类爆炸),如果我们再增加手机的样式(滑盖式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。 违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本。 故引出桥接模式进行解决 二. 桥接模式 1. 概念 桥接模式(B...

枫陵的博客 1844

C++设计模式——Bridge桥接模式

设计模式入门

程序员与背包客_CoderZ 1829

跟着实例学习设计模式(9)-桥接模式bridge(结构型)

桥接模式属于结构型设计模式。 设计意图:将抽象部分与实现部分分离,使它们都可以独立的变化。 一看到设计意图,大家可能有些发懵,我们看到的继承和接口不都是抽象和实现分离的吗?尤其是接口和抽象类都是这样的实现啊!那怎么还有这么个桥接的分离呢? 我们先来看个例子。 例如:汽车品牌内置导航仪,我们希望实现,每个品牌的导航仪都可以在任何一个牌子的汽车上安装并启动。 汽车品牌有两个:宝马、奔驰。

沉默 6235

【Java设计模式】Bridge模式:在Java中解耦抽象与实现

在Java开发中,设计模式是提高代码质量和可维护性的重要工具。本文将介绍Bridge模式,它是一种结构型设计模式,用于解耦抽象与实现,增强软件系统的灵活性和可扩展性。

道长的博客 1427

Bridge模式设计模式项目:C++实现与解析

在软件工程中,设计模式作为解决问题的最佳实践,为我们提供了面向对象设计的模板。其中,Bridge模式是一种结构型设计模式,它通过将抽象与实现分离来使两者独立变化,进而减少代码间的耦合度。Bridge模式通过抽象接口和实现接口的分离,增加了代码的灵活性和可维护性。这种模式特别适用于当抽象和它的实现可以以不同的方式变化的情况,即两者之间需要独立地进行扩展,而不会相互影响。本章将带领读者从设计模式的基本概念出发,深入理解Bridge模式的原理和核心要素。

weixin_42471823的博客 830

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

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

sinat_42974726的博客 1317

保姆级教程:用ROS2 Humble + Gazebo Classic 从零搭建一个能键盘控制的差分AGV模型

本文提供了一份详细的ROS2 Humble与Gazebo Classic教程,指导用户从零开始搭建一个键盘控制的差分AGV模型。内容涵盖环境配置、Xacro文件设计、Gazebo仿真集成以及键盘控制实现,特别针对常见问题提供解决方案,帮助开发者快速掌握ROS2机器人仿真技术。

weixin_30387423的博客 168

Java设计模式:桥接模式

桥接(Bridge)模式属于结构型设计模式。通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。该UML结构图如下:主要角色:(1)Abstraction:抽象类。(2)RefinedAbstraction:扩充抽象类。(3)Implementor:实现类接口。(4)ConcreteImplementor:具体实现类 。场景: 一个甜品店,售卖的食品有蛋糕、奶茶和牛奶,但

原名:@程序员大禹 5157

Python气象数据处理实战:用PyCINRAD轻松绘制雷达PPI图像(附避坑指南)

本文详细介绍了如何使用Python库PyCINRAD处理中国CINRAD系列天气雷达的基数据,并绘制专业的PPI图像。内容涵盖从环境配置、数据读取、核心绘图到高级定制与批量处理的完整流程,并针对安装依赖、中文乱码、数据范围等常见问题提供了实用的避坑指南,帮助气象工作者高效完成雷达数据可视化。

dog123的博客 221

海康威视摄像头网线连接笔记本电脑,客户端提示:1连接设备失败。设备不在线或网络原因引起的连接超时等。(HCNetSDK.dll[7].)解决方案

1.环境 电脑:联想笔记本电脑(win10系统) 摄像头:海康威视DS-2CD3T20D-i5,4mm 连接方式:直接用网线将摄像头和摄像头连接 2.问题: 客户端出现如下提示: 3. 解决流程: 1.确认网线是否有问题:我的网线指示灯常亮,并且设备能够被搜索到,只是一直显示离线 2.按照网上教程直接配置摄像头的ip地址与电脑同一网段:登录失败。 错误码为 HCNetSDK.dll[7].(连接设备失败。设备不在【海康威视吧】_百度贴吧 失败了,没有反应 3.查看有线网卡的地

weixin_48911487的博客 3万+

深入浅出设计模式(7)——Bridge模式

概述     Bridage 模式就是把抽象部分和它的实现部分分离开来,让两者可独立变化。这里的抽象部分指的是一个概念层次上的东西,它的实现部分指的是实现这个东西的(功能)部分,分离就把实现部分从它要实现的抽象部分独立出来,自我封装成对象。  桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合

Secret Island 809

【笔记篇】Davinci Configurator EcuM模块

autosar ecum模块简介

weixin_47571898的博客 1268

设计模式C++ 笔记二 结构型模式

1、Bridge模式 用户需求发生变化,要两个算法实现功能,往常状态需要多添加一个类。Bridge将系统分成两个相对独立的部分,抽象部分和实现部分。抽象部分根据参数,运行时动态决定采用哪个子类的函数。这样再加入一个函数实现时,只需要修改实现部分,继承出一个子类,不需要修改抽象部分。 //--------------Abstraction.h -----------------

moonboat0331的专栏 665

Python爬虫实战:全自动采集银行理财产品收益率数据

本文通过Playwright动态爬虫技术,成功实现了对银行理财产品收益率数据的实时采集,并通过 Pandas 数据清洗、SQLite 存储、调度自动化等模块,构建了一个可扩展的银行理财数据抓取系统。理财非儿戏,数据做决策。掌握银行收益信息是我们迈向理性投资的第一步。希望这套工具对你有所帮助!

2201_76125261的博客 1154

【全球人口数据集】全球人口密度数据集GPWv4

全球人口密度数据集GPWv4

WW、forever的博客 1002

设计模式之命令模式(Command)摘录

设计模式之命令模式(Command)摘录!

网络资源是无限的 2736

DW3000芯片驱动API介绍

详细介绍DW3000驱动程序API的调用流程说明和中断处理程序流程说明

DT程序员的博客 1519

设计模式之职责链模式(Chain of Responsibility)摘录

23种GOF设计模式一般分为三大类:创建型模式、结构型模式、行为模式。创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托付给还有一个对象。创建型模式有两个不断出现的主旋律。第一,它们都将关于该系统使用哪些详细的类的信息封装起来。第二,它们隐藏了这些类的实例是怎样被创建和放在一起的。整个系统...

weixin_30544657的博客 77

协方差矩阵自适应进化策略(CMA-ES)详解:从基础原理到优化算法

CMA-ES是一种先进的无导数优化算法,基于生物进化原理解决连续域非线性优化问题。该算法通过自适应调整多元正态分布的均值、协方差矩阵和步长参数,自动学习搜索空间结构,无需梯度信息即可高效优化。核心创新包括协方差矩阵的秩1和秩μ更新策略,以及基于进化路径的步长控制机制。CMA-ES具有旋转不变性、标度不变性和全局探索能力,特别适合3-300维的黑盒优化问题,在复杂系统仿真、超参数调优等领域表现优异。算法实现中关键参数如种群大小、学习率等均有自适应设置规则,使其成为连续优化领域的基准算法之一。

qq_42212808的博客 523

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立变化。桥接模式就像现实中的万能遥控器——一个抽象接口(遥控器)通过桥接可以控制多种具体设备(电视),既灵活又避免了复杂的继承关系。

倔强老吕的博客 2098

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

wesigj的博客 2823

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Bridge模式

桥接设计模式介绍

qq_63612259的博客 722

Java 设计模式之桥接模式(Bridge Pattern)

桥接模式(Bridge Pattern)是一种用于将抽象部分与其实现部分分离的结构型设计模式。这种模式通过组合关系而不是继承关系来连接抽象与实现,使代码更具扩展性和维护性。桥接模式的核心思想是将抽象和实现解耦,使得两者可以独立变化。桥接模式(Bridge Pattern)是一种结构型设计模式,旨在将抽象部分与其实现部分分离,从而使两者可以独立地变化。桥接模式通过组合关系代替继承关系,将抽象和实现解耦,使代码更具扩展性和维护性。

微笑听雨 2836

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

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

Meteors.的博客 1224

【设计模式无难事】——Bridge模式

【设计模式无难事】——Bridge模式 一、意图 桥接模式,顾名思义,这里有一个“桥”。。。 为什么需要一个“桥”呢? 我们用它来连接什么呢? 下面先看一个例子 二、例子 需求场景 在游戏中,玩家使用武器砍怪时,战斗的特效的实现 武器:宝剑、铁锤 特效:吸魂、回旋飞 分析&实作 桥接模式实现 1,所有的特效都包括:激活,运用,消失。于是我们定义一个特效接口 Ench

zzy_801011的博客 325
上一篇: 设计模式与实例代码:Decorator模式
下一篇: 设计模式与实例代码:Observer模式
zzulp
博客等级 码龄19年 464粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值