《C++20设计模式》桥接模式经验分享

一、前言

怎么判断你是否理解桥接模式了呢?🧐
试着回答下面这个问题吧!😋
桥接模式到底解决的是什么问题?
当一个类有两个或多个抽象父类,把继承抽象父类变成组合(耦合)抽象类,降低系统复杂度的操作

相关代码可以在这里,如有帮助给个star
AidenYuanDev/design_patterns_in_modern_Cpp_20

二、探讨一个类有多个抽象父类的情况(为什么会有桥接)

这里的C要求继承一个A类一个B类,实际上可以的组合6种不同的C。(如果再多点A、B子类,C的数量级将是指数级增长)😵
怎么解决这个问题呢!!!🤩
答案当然是桥接!🥳
桥接模式继承问题

三、桥接模式

桥接模式高明的点就是把原来需要继承的父类,组合起来。这里可能过于抽象,先看看下面的类图和代码吧!

被组合的类,需要不同的子类,传给他进行初始化就可以了。

3.1 UML类图

桥接模式

3.2 实现

#include <iostream>
#include <memory>
using namespace std;
class A_Base {
public:
    virtual void show() = 0;
};

class A1 : public A_Base {
public:
    void show() override {
        cout << "A1" << '\t';
    }
};

class A2 : public A_Base {
public:
    void show() override {
        cout << "A2" << '\t';
    }
};

class B_Base {
protected:
    B_Base(shared_ptr<A_Base> a) : p_a(a) {}

public:
    virtual void show() = 0;
    shared_ptr<A_Base> p_a;
};

class B1 : public B_Base {
public:
    B1(shared_ptr<A_Base> a) : B_Base(a) {}
    void show() override {
        p_a->show();
        cout << "B1" << '\t';
    }
};

class B2 : public B_Base {
public:
    B2(shared_ptr<A_Base> a) : B_Base(a) {}
    void show() override {
        p_a->show();
        cout << "B2" << '\t';
    }
};



int main(){
    shared_ptr<A_Base> p_a = make_shared<A1>();
    unique_ptr<B1> b1 = make_unique<B1>(p_a); // 想要A_Base的哪个子类传就可以
    b1->show();
    return 0;
}

四、最后

创作不易,如有帮助,点个赞吧!😚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值