模式解释
百度:
这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的交流调用。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化改变而互不影响。
主要解决的问题:
1、当一个类存在两个独立变化的维度,且这两个维度都需要扩展时,使用桥接模式
2、对于不希望使用继承或因多层次继承导致类数量急剧增加的系统,桥接模式特别适用
3、当系统需要在抽象化角色和具体化角色之间增加灵活性时,考虑使用桥接模式
可应用的场景:跨平台的视频播放器(不同平台 || 不同视频格式)
代码用法实例呈现
1、公司类+程序员类做桥接
2、公司类:大,中,小
程序员:c++,java,python
多种组合:大厂c++,小厂java,大厂java...
实现步骤:
1、纯虚函数 + 子类继承
2、对类构造限制 protect,即不对外开放权限
3、子类可使用父类的成员变量(包括protect 和 pulic)但禁止使用父类的私域!
源码呈现
公司类:
#pragma once #include<iostream>class company {public://company();virtual void money() {};}; //********* 以下可以建立多个业务对象类 ******class Big:public company {public:virtual void money() {std::cout << "大厂工作 2w" << std::endl;};}; class Mid :public company {public:virtual void money() {std::cout << "中厂工作 1w" << std::endl;}; }; class Small :public company {public:virtual void money() {std::cout << "小厂工作 0.8w" << std::endl;}; };
程序员类:
#pragma once #include"company.h" #include<iostream>class human {protected:company* cp;public:human(company* cp_) :cp(cp_) { };virtual void tool() {};}; //********* 以下可以建立多个业务对象类 ******class CPlus : public human { public:CPlus(company* cp_) :human(cp_) {};virtual void tool() {std::cout << "使用 C++ " << std::endl;cp->money();};};class Java : public human { public:Java(company* cp_) :human(cp_) {};virtual void tool() {std::cout << "使用 Java " << std::endl;cp->money();};}; class Python : public human { public:Python(company* cp_) :human(cp_) {};virtual void tool() {std::cout << "使用 Python " << std::endl;cp->money();};};
main 函数调用:
#include<iostream> #include"company.h" #include"human.h"using namespace std;int main(int argv,char**argc) {Big big;Mid mid;Small small;CPlus boy1(&big);Java boy2(&big);Python boy3(&small);boy1.tool();boy2.tool();boy3.tool();return 0; }