概念
桥接模式是一种结构化模式,是将一个大类或者一系列的紧密相关的类拆分为抽象和现实两个独立部分的层次结构,通过引用独立层次对象的组合实现类。
桥接模式可以将庞杂类拆分为几个类层次结构。 此后, 你可以修改任意一个类层次结构而不会影响到其他类层次结构。 这种方法可以简化代码的维护工作, 并将修改已有代码的风险降到最低。
抽象部分:定义了高层的逻辑控制,且依赖于实现部分。
具体抽象部分:对抽象部分进行扩展,实现不同的控制逻辑,一般抽象部分和具体抽象部分为父子关系。
实现部分:定义了底层的操作接口,为抽象部分提供支持。
**具体实现部分:**对实现部分进行了扩展,实现不同的支持,一般实现部分和具体实现部分为父子关系。
适用场景
1、如果你想要拆分或者重组一个具有多重功能的庞杂类。
2、如果你希望在几个独立维度上扩展一个类,可以使用此模式。
实现方式
1、明确类中独立的维度,独立的感念可能是:抽象/实现,域/基础设施,前端/后端。之后根据分离出来的部分创建抽象部分和实现部分的接口。并在抽象部分中定义实现部分的引用。
2、实现抽象部分和实现部分的具体实现。。
3、实现部分和抽象部分的引用就是桥接。
解决问题
以减实现部分和抽象部分的耦合,防止类爆炸
类关系结构
例程代码
#include "QiaoJieMoShi.h"
int main()
{
std::cout << "欢迎东哥来到设计模式的世界!\n";
QJPhoneShell* phShell = new QJPhoneShell();
phShell->color = "炫酷黑蓝";
phShell->name = "科幻星空";
//可添加其他配色
QJPhone* phone = new QJPhone();
phone->m_phoneShell = phShell;
phone->brand = "玄机100";
phone->type = "旗舰机";
//可添加其他机型
cout << "brand " << phone->brand << endl;
cout << " type " << phone->type << endl;
cout << "color " << phone->m_phoneShell->color << endl;
cout << " name " << phone->m_phoneShell->name << endl;
}
#pragma once
#include <string>
//相当于实现部分
class QJPhoneShell {
public:
QJPhoneShell() {};
~QJPhoneShell() {};
std::string color;
std::string name;
};
//相当于抽象部分
class QJPhone
{
public:
QJPhone() {};
~QJPhone() {};
QJPhoneShell* m_phoneShell = nullptr;
std::string type;
std::string brand;
};