文章目录
- 一、前言
- 二、探讨一个类有多个抽象父类的情况(为什么会有桥接)
- 三、桥接模式
- 3.1 UML类图
- 3.2 实现
- 四、最后
一、前言
怎么判断你是否理解桥接模式了呢?🧐
试着回答下面这个问题吧!😋
桥接模式到底解决的是什么问题?
当一个类有两个或多个抽象父类,把继承抽象父类变成组合(耦合)抽象类,降低系统复杂度的操作
相关代码可以在这里,如有帮助给个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;
}
四、最后
创作不易,如有帮助,点个赞吧!😚