首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >GoF 23种经典的设计模式——桥接模式

GoF 23种经典的设计模式——桥接模式

作者头像
Andromeda
发布于 2024-01-17 01:43:37
发布于 2024-01-17 01:43:37
13800
代码可运行
举报
文章被收录于专栏:Andromeda的专栏Andromeda的专栏
运行总次数:0
代码可运行

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化改变而互不影响。

桥接模式的目的是将抽象与实现分离,使它们可以独立地变化,该模式通过将一个对象的抽象部分与它的实现部分分离,使它们可以独立地改变。它通过组合的方式,而不是继承的方式,将抽象和实现的部分连接起来。

桥接模式的几个关键角色:

  1. 抽象(Abstraction): 定义抽象接口,通常包含对实现接口的引用。抽象类是对高层业务逻辑的抽象,它包含了对实现的引用,并定义了高层次的操作。它可以是一个抽象类或者一个接口。
  2. 扩展抽象(Refined Abstraction): 对抽象的扩展,可以是抽象类的子类或具体实现类。扩展抽象类在抽象的基础上添加更多的功能或进行定制,同时仍然通过实现接口来调用实现。
  3. 实现(Implementor): 定义实现接口,提供基本操作的接口。实现接口是对底层操作的抽象,它可能是一个接口或者抽象类,定义了基本的操作方法。
  4. 具体实现(Concrete Implementor): 实现实现接口的具体类。具体实现类实现了底层的具体操作,供抽象和扩展抽象类调用。
  1. 增加灵活性: 如果系统需要在抽象和具体实现之间增加更多的灵活性,避免静态的继承关系,桥接模式是一个不错的选择。它允许抽象和实现独立变化,使得系统更容易扩展和维护。
  2. 避免多层次继承: 当系统不希望使用多层次继承,或者继承层次导致类的个数急剧增加时,桥接模式是一种有效的替代方案。通过桥接模式,可以减少继承的层次,将抽象和实现分离,避免类层次结构的膨胀。
  3. 独立变化的维度: 当一个类存在两个或多个独立变化的维度,且这些维度都需要进行扩展时,桥接模式非常适用。通过桥接模式,可以灵活地组合不同的抽象和实现,而不需要创建所有可能的组合,从而降低了系统的复杂性。

在这个例子中,我们有两个维度:ShapeColorShape 表示图形,Color 表示颜色。通过桥接模式,我们可以轻松地组合不同的形状和颜色。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>

// 实现接口
class Color
{
public:
    virtual void applyColor() = 0;
};

// 具体实现类
class Red : public Color
{
public:
    void applyColor() override
    {
        std::cout << "Applying red color" << std::endl;
    }
};

class Green : public Color
{
public:
    void applyColor() override
    {
        std::cout << "Applying green color" << std::endl;
    }
};

// 抽象类
class Shape
{
protected:
    Color *color;

public:
    Shape(Color *color) : color(color) {}

    virtual void draw() = 0;
};

// 扩展抽象类
class Circle : public Shape
{
public:
    Circle(Color *color) : Shape(color) {}

    void draw() override
    {
        std::cout << "Drawing circle ";
        color->applyColor();
    }
};

class Rectangle : public Shape
{
public:
    Rectangle(Color *color) : Shape(color) {}

    void draw() override
    {
        std::cout << "Drawing rectangle ";
        color->applyColor();
    }
};

int main()
{
    // 创建具体的形状和颜色
    Color *red = new Red();
    Color *green = new Green();

    Shape *redCircle = new Circle(red);
    Shape *greenRectangle = new Rectangle(green);

    // 绘制
    redCircle->draw();
    greenRectangle->draw();

    // 释放资源
    delete red;
    delete green;
    delete redCircle;
    delete greenRectangle;

    return 0;
}

.post-copyright { box-shadow: 2px 2px 5px; line-height: 2; position: relative; margin: 40px 0 10px; padding: 10px 16px; border: 1px solid var(--light-grey); transition: box-shadow .3s ease-in-out; overflow: hidden; border-radius: 12px!important; background-color: var(--main-bg-color); } .post-copyright:before { position: absolute; right: -26px; top: -120px; content: '\f25e'; font-size: 200px; font-family: 'FontAwesome'; opacity: .2; } .post-copyright__title { font-size: 22px; } .post-copyright_type { font-size: 18px; color:var(--theme-color) } .post-copyright .post-copyright-info { padding-left: 6px; font-size: 15px; } .post-copyright-m-info .post-copyright-a, .post-copyright-m-info .post-copyright-c, .post-copyright-m-info .post-copyright-u { display: inline-block; width: fit-content; padding: 2px 5px; font-size: 15px; } .muted-3-color { color: var(--main-color); } /*手机优化*/ @media screen and (max-width:800px){.post-copyright-m-info{display:none}} ------本页内容已结束,喜欢请分享------

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【详解】JAVA设计模式桥接模式(Bridge)
在面向对象的设计中,设计模式是一种在特定情况下解决设计问题的通用可重用方案。本文将介绍一种结构型设计模式——桥接模式(Bridge Pattern)。桥接模式用于将抽象部分与实现部分分离,使它们可以独立变化。
大盘鸡拌面
2025/03/14
770
常用设计模式——桥接模式
在正式介绍桥接模式之前,我先跟大家谈谈两种常见文具的区别,它们是毛笔和蜡笔。假如我们需要大中小3种型号的画笔,能够绘制12种不同的颜色,如果使用蜡笔,需要准备3×12 = 36支,但如果使用毛笔的话,只需要提供3种型号的毛笔,外加12个颜料盒即可,涉及到的对象个数仅为 3 + 12 = 15,远小于36,却能实现与36支蜡笔同样的功能。如果增加一种新型号的画笔,并且也需要具有12种颜色,对应的蜡笔需增加12支,而毛笔只需增加一支。为什么会这样呢?通过分析我们可以得知:在蜡笔中,颜色和型号两个不同的变化维度(即两个不同的变化原因)融合在一起,无论是对颜色进行扩展还是对型号进行扩展都势必会影响另一个维度;但在毛笔中,颜色和型号实现了分离,增加新的颜色或者型号对另一方都没有任何影响。如果使用软件工程中的术语,我们可以认为在蜡笔中颜色和型号之间存在较强的耦合性,而毛笔很好地将二者解耦,使用起来非常灵活,扩展也更为方便。在软件开发中,我们也提供了一种设计模式来处理与画笔类似的具有多变化维度的情况,即本章将要介绍的桥接模式。
用户5325874
2020/01/16
4490
常用设计模式——桥接模式
一文搞懂桥接模式
在软件设计中,桥接模式(Bridge Pattern)是一种结构型设计模式,旨在通过将抽象部分与其实现部分分离,使它们可以独立变化。
闫同学
2025/01/13
1080
重温设计模式 --- 桥接模式
桥接模式是一种结构型设计模式,它可以将一个大类或一组相关的类拆分成抽象和实现两个独立的层次结构,从而可以在两个层次结构中分别变化。桥接模式的核心思想是“尽可能将抽象部分和实现部分分离,使它们可以独立地变化”。这样可以使得系统更加灵活,易于扩展和维护。
Niuery Diary
2023/10/22
1990
重温设计模式 --- 桥接模式
GoF 23种经典的设计模式——原型模式
原型模式(Prototype Pattern)是一种创建型设计模式,其主要思想是通过复制(克隆)现有对象来创建新的对象,而不是通过构造函数创建。这样可以避免重复创建相似对象时的性能损耗,同时也更灵活,可以动态地添加或删除对象。原型模式的性能优势主要来自于避免了重复的初始化和构造过程。在原型模式中,对象的克隆是通过复制已有对象的数据而不是重新构造对象,因此避免了重复的初始化和资源获取操作,提高了性能。
Andromeda
2024/01/16
1700
GoF 23种经典的设计模式——原型模式
结构型模式——桥接模式
**适用场景:**在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。
栗筝i
2022/12/01
2350
设计模式之桥接模式
九转成圣
2024/04/15
1440
设计模式之桥接模式
桥接模式详解
桥接模式是一种结构型设计模式,旨在将抽象部分与实现部分分离,使它们可以独立地变化。通过这种方式,桥接模式减少了抽象和实现之间的依赖,提供了更高的灵活性和扩展性。
码事漫谈
2024/12/20
1520
桥接模式详解
23种设计模式,桥接模式实战
桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分与其实现部分分离,使它们可以独立变化。这种模式通过创建一个桥接实现接口,把抽象和实现放在两个不同的类层次中,使两者可以独立地改变。
小马哥学JAVA
2024/04/06
2060
GoF 23种经典的设计模式——创建者模式
Builder 模式是一种创建对象的设计模式,它将对象的构建过程与其表示分离,允许按照步骤构建复杂对象。它提供了一种可读性强、灵活性高的方式来构建对象。
Andromeda
2024/01/15
1970
GoF 23种经典的设计模式——创建者模式
设计模式——桥接模式
桥接模式(Bridge Pattern),作为结构型设计模式的一种,桥接模式的核心精髓在于解耦两个乃至多个维度的变化(本文仅以两个维度为例),确保各个维度能够独立演化,互不干扰。它构筑了一道横跨各个维度的桥梁,促进各维度顺畅交互的同时,保持各自的独立边界。
程序员的园
2024/07/18
1260
设计模式——桥接模式
Java设计模式学习笔记—桥接模式
文章最后“Java设计模式笔记示例代码整合”为本系列代码整合,所有代码均为个人手打并运行测试,不定期更新。本节内容位于其Bridge包(package)中。
WindCoder
2018/09/20
5970
Java设计模式学习笔记—桥接模式
十一、桥接模式 ( Bridge Pattern )
桥接模式(Bridge Pattern)是用于把抽象化与实现化解耦,使得二者可以独立变化
botkenni
2022/09/07
3120
十一、桥接模式 ( Bridge Pattern )
设计模式之桥接模式(结构型)
桥接模式(Bridge Pattern)是将抽象部分和实现部分分离,使它们可以独立地改变,是一种对象结构型模式。
SmileNicky
2019/03/15
3110
跟着GPT学设计模式之桥接模式
桥接模式,也叫作桥梁模式,英文是 Bridge Design Pattern。在 GoF 的《设计模式》一书中,桥接模式是这么定义的:“Decouple an abstraction from its implementation so that the two can vary independently。”翻译成中文就是:“将抽象和实现解耦,让它们可以独立变化。” 桥接模式通过将一个类的抽象部分与实现部分分离开来,使它们可以独立地进行扩展和修改。
codetrend
2024/03/13
1330
Java设计模式之桥接模式
在软件设计中,桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立变化。这种模式通过将继承关系转化为组合关系,从而降低了类与类之间的耦合度,提高了系统的可扩展性。
刺槐儿
2024/01/27
4070
10.桥接模式设计思想
本文介绍了桥接模式的设计思想和实现方法。桥接模式通过将抽象部分与实现部分分离,使它们可以独立变化,解决了多层继承带来的复杂性和耦合性问题。文章详细讲解了桥接模式的由来、定义、应用场景和实现步骤,并通过具体实例演示了如何在支付场景中使用桥接模式。此外,还讨论了桥接模式的优缺点及其适用环境,提供了丰富的代码示例和进一步学习的资源链接。
杨充
2024/11/06
1790
「聊设计模式」之桥接模式(Bridge)
🏆本文收录于《聊设计模式》专栏,专门攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎持续关注&&收藏&&订阅!
bug菌
2023/11/04
3410
「聊设计模式」之桥接模式(Bridge)
结构型之桥接模式C++实现
需求分析:图形既可按形状分,又可按颜色分。如何能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难。如不同颜色和字体的文字、不同品牌和功率的汽车、不同性别和职业的男女、支持不同平台和不同文件格式的媒体播放器等
用户9831583
2022/06/16
2020
结构型之桥接模式C++实现
JAVA设计模式9:桥接模式,将抽象部分与实现部分分离
桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化,桥接模式通过将继承关系转换为关联关系,来实现解耦和灵活性。
Designer 小郑
2023/09/21
5740
JAVA设计模式9:桥接模式,将抽象部分与实现部分分离
相关推荐
【详解】JAVA设计模式桥接模式(Bridge)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档