设计模式之桥接模式-逢山开路,遇水搭桥!

一、桥接模式的概念

桥接模式是构造型的设计模式之一,基于类的最小设计原则, 使用封装、聚合以及继承等行为来让不同的类承担不同的责任。

它的主要特点是把抽象与行为实现分离开来,从而可以保持各部分的独立性以及对它们的功能扩展。

二、桥接模式使用场景

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、需要正确的能够识别出系统中独立变化的维度,有一定的局限性。

能力有限,如有错误,多多指教。。。

posted @ 2020-02-22 12:13  ISmileLi  阅读(5)  评论(0编辑  收藏  举报