桥模式

作者: 钟离惜 | 来源:发表于2020-10-25 22:50 被阅读0次

属于单一职责性设计模式,主要是将类多个方向的变化拆分成多个类独立方向的变化,使其职责保持单一。

所以桥梁模式的用意是“将抽象化与实现化脱耦,使得二者可以独立地变化”。
处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联。

比如下面这个多继承结构,一是不符合“开-闭”原则,二是需要的类非常多,编码重复性较高。


如果单独把图形和颜色拆分开,实现解耦,让二者独立变化,


类变化的方向隐含着类的责任,让多个方向拆开,一个采用继承,一个采用组合,甚至多个组合的方式,我的理解是这个继承的类型相当于一座桥梁,连接了多个方向的变化,所以称为桥模式。

示例代码

#include <iostream>


using namespace std;


// ============================================
// 枪械基类
class Gun_base {
public:
    virtual ~Gun_base() {}

    virtual void fire() const = 0;
};


// 手枪
class Pistol : public Gun_base {
public:
    void fire() const {
        cout << "手枪发射—— biu biu biu!" << endl;
    }
};


// 步枪
class Rifle : public Gun_base {
public:
    void fire() const {
        cout << "步枪发射—— tu tu tu!" << endl;
    }
};


// 狙击枪
class Awp :public Gun_base {
public:
    void fire() const {
        cout << "狙击枪发射—— peng!" << endl;
    }
};
// ============================================


// ============================================
// 战士基类
class Fighter_base {
public:
    virtual ~Fighter_base() {}

    virtual void fight(Gun_base* gun) const = 0;
};


// 战士A
class Fighter_A : public Fighter_base {
public:
    void fight(Gun_base* gun) const {
        cout << "我是战士A! ———— ";
        gun->fire();
    }
};


// 战士B
class Fighter_B : public Fighter_base {
public:
    void fight(Gun_base* gun) const {
        cout << "我是战士B! ———— ";
        gun->fire();
    }
};


// 战士C
class Fighter_C : public Fighter_base {
public:
    void fight(Gun_base* gun) const {
        cout << "我是战士C! ———— ";
        gun->fire();
    }
};
// ============================================


int main() {
    // 创建三种枪
    Gun_base* gun_01 = new Pistol();
    Gun_base* gun_02 = new Rifle();
    Gun_base* gun_03 = new Awp();

    // 创建三种战士
    Fighter_base* A = new Fighter_A();
    Fighter_base* B = new Fighter_B();
    Fighter_base* C = new Fighter_C();

    // 不同战士搭配不同枪械展示
    C->fight(gun_02);

    delete gun_01;
    delete gun_02;
    delete gun_03;

    delete A;
    delete B;
    delete C;
}

参考文章
设计模式(八)桥梁模式(Bridge)
设计模式--桥接模式(桥模式)
C++桥模式

相关文章

  • 设计模式-桥接模式

    设计模式-桥接模式 定义 桥接模式(Bridge Pattern)也称为桥梁模式、接口(Interface)模式或...

  • 设计模式之桥接模式

    设计模式之桥接模式 1. 模式定义 桥接模式又称柄体模式或接口模式,它是一种结构性模式。桥接模式将抽象部分与实现部...

  • 结构型模式:桥接模式

    文章首发:结构型模式:桥接模式 七大结构型模式之二:桥接模式。 简介 姓名 :桥接模式 英文名 :Bridge P...

  • 设计模式-桥接模式

    桥接模式介绍 桥接模式(Bridge Pattern)也称为桥梁模式,是结构型设计模式之一。顾名思义其与现实中的桥...

  • 桥接模式

    个人博客http://www.milovetingting.cn 桥接模式 模式介绍 桥接模式也称为桥梁模式,是结...

  • 06-01-001 虚拟机的网络连接方式(转运整理)

    一、Bridged(桥接模式) 什么是桥接模式?桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥...

  • 设计模式——桥接模式

    设计模式——桥接模式 最近公司组件分享设计模式,然而分配给我的是桥接模式。就在这里记录我对桥接模式的理解吧。 定义...

  • Java设计模式——桥接模式

    Java设计模式之桥接模式 回顾 上一期分享了适配器模式,主要为了实现解耦 桥接模式 简介 桥接模式是对象的结构模...

  • 桥接模式

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

  • 桥模式

    属于单一职责性设计模式,主要是将类多个方向的变化拆分成多个类独立方向的变化,使其职责保持单一。 所以桥梁模式的用意...

网友评论

      本文标题:桥模式

      本文链接:https://www.haomeiwen.com/subject/bglomktx.html