设计模式之桥接模式-逢山开路,遇水搭桥!
一、桥接模式的概念
桥接模式是构造型的设计模式之一,基于类的最小设计原则, 使用封装、聚合以及继承等行为来让不同的类承担不同的责任。
它的主要特点是把抽象与行为实现分离开来,从而可以保持各部分的独立性以及对它们的功能扩展。
二、桥接模式使用场景
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、需要正确的能够识别出系统中独立变化的维度,有一定的局限性。
能力有限,如有错误,多多指教。。。
本文为博主原创文章,未经博主允许请勿转载!作者:ISmileLi