2、桥接模式
模式解释
百度:
这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的交流调用。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化改变而互不影响。
主要解决的问题:
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; }
结果展示:
原文地址:https://blog.csdn.net/the_dry/article/details/143891853
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!