桥接模式
- 一、桥接模式的概念
- 二、桥接模式使用场景
- 三、桥接模式构建方法
- 1、抽象类类
- 2、具体实现类
- 3、行为抽象类
- 4、行为具体实现类
- 四、桥接模式的示例
- 五、桥接模式的优缺点
- 优点:
- 缺点:
一、桥接模式的概念
桥接模式是构造型的设计模式之一,基于类的最小设计原则, 使用封装、聚合以及继承等行为来让不同的类承担不同的责任。
它的主要特点是把抽象与行为实现分离开来,从而可以保持各部分的独立性以及对它们的功能扩展。
二、桥接模式使用场景
1、希望将一个系统中的抽象部分和实际部分解耦合,增加各部分的灵活性可以使用桥接模式。
2、一个系统中或者一个类中存在独立变化的两个维度,这两个维度需要进行独立的扩展时可以使用桥接模式。
三、桥接模式构建方法
1、抽象类类
提供可以维护对行为引用的公共接口。
2、具体实现类
具体实现维护对行为引用的公共接口
3、行为抽象类
提供行为实现类接口
4、行为具体实现类
具体实现行为抽象类接口
四、桥接模式的示例
// BridgePattern.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>
#include <string>using namespace std;// 海思麒麟系列芯片
class KirinChip
{
public:virtual void useKirinChip() = 0;
};// 麒麟960芯片
class Kirin960 : public KirinChip
{
public:virtual void useKirinChip(){cout << "use Kirin960 Chip." << endl;}
};// 麒麟970芯片
class Kirin970 : public KirinChip
{
public:virtual void useKirinChip(){cout << "use Kirin970 Chip." << endl;}
};// 麒麟980芯片
class Kirin980 : public KirinChip
{
public:virtual void useKirinChip(){cout << "use Kirin980 Chip." << endl;}
};// 华为手机
class HuaWeiPhone
{
public:HuaWeiPhone(KirinChip *pKirinChip){m_pKirinChip = pKirinChip;}virtual void useKirinChip() = 0;protected:KirinChip *m_pKirinChip;
};// 华为P8
class HuaWeiP8 : public HuaWeiPhone
{
public:HuaWeiP8(KirinChip *pKirinChip) : HuaWeiPhone(pKirinChip){}virtual void useKirinChip(){cout << "HuaWeiP8 ";m_pKirinChip->useKirinChip();}};// 华为P9
class HuaWeiP9 : public HuaWeiPhone
{
public:HuaWeiP9(KirinChip *pKirinChip) : HuaWeiPhone(pKirinChip){virtual void useKirinChip(){cout << "HuaWeiP9 ";m_pKirinChip->useKirinChip();}
};// 华为P10
class HuaWeiP10 : public HuaWeiPhone
{
public:HuaWeiP10(KirinChip *pKirinChip) : HuaWeiPhone(pKirinChip){}virtual void useKirinChip(){cout << "HuaWeiP10 ";m_pKirinChip->useKirinChip();}
};#define DELETE_PTR(p) {if(p!=nullptr){delete (p); (p)=nullptr;}}
int main()
{cout << "------------桥接模式-----------" << endl;cout << "以下手机和芯片的组合随意的,并不能真实反映华为手机和芯片配置情况,真实信息请在google上BaiDu一下!" << endl;Kirin960 *pKirin960 = new Kirin960;HuaWeiP8 *pHuaWeiP8 = new HuaWeiP8(pKirin960);pHuaWeiP8->useKirinChip();Kirin970 *pKirin970 = new Kirin970;HuaWeiP9 *pHuaWeiP9 = new HuaWeiP9(pKirin970);pHuaWeiP9->useKirinChip();Kirin980 *pKirin980 = new Kirin980;HuaWeiP10 *pHuaWeiP10 = new HuaWeiP10(pKirin980);pHuaWeiP10->useKirinChip();DELETE_PTR(pKirin960);DELETE_PTR(pHuaWeiP8);DELETE_PTR(pKirin970);DELETE_PTR(pHuaWeiP9);DELETE_PTR(pKirin980);DELETE_PTR(pHuaWeiP10);std::cout << "Hello World!\n";getchar();
}
运行结果:
五、桥接模式的优缺点
优点:
1、分离抽象接口和行为实现部分。
2、提高系统的扩展性,独立的维度可以随意扩展。
3、比多继承的代码复用性强,是替换继承的一种好方法。
缺点:
1、需要正确的能够识别出系统中独立变化的维度,有一定的局限性。
能力有限,如有错误,多多指教。。。