C++设计模式笔记——桥接模式

桥接模式

如果类存在两个维度可以独立变化,将这两个维度分离,使它们可以独自变化,独立扩展。这就是桥接模式的目的。

电脑包含软件,电脑种类众多,软件同样种类众多。使用桥接模式把电脑与软件桥接起来,把抽象概括起来。将电脑和软件做分离,实现了电脑和软件可以独立变化。

拓展时只需要添加具体的电脑和具体的软件类。

代码示例

#include <iostream>
class ISoftware  //软件抽象类
{
public:
	virtual void run() = 0;
};

class SoftwareGame : public ISoftware
{
public:
	void run()
	{
		std::cout << "游戏软件" << std::endl;
	}
};
class SoftwareWork : public ISoftware
{
public:
	void run()
	{
		std::cout << "干活软件" << std::endl;
	}
};


class Computer   //电脑抽象类,包含软件抽象类对象,具体软件的运行由具体对象去实现 
{
protected:
	ISoftware * m_software;
public:
	Computer() : m_software(nullptr) {}
	virtual ~Computer()
	{
		if (nullptr == m_software)
			delete m_software;
	}

	virtual void run() = 0;

	void setSoftware(Software *p)
	{
		m_software = p;
	}
};


class ComputerA : public Computer
{
public:
	void run()
	{
		std::cout << "ComputerA 电脑运行";
		m_software->run();
	}
};


class ComputerB : public Computer
{
public:
	void run()
	{
		std::cout << "ComputerB 电脑运行";
		m_software->run();
	}
};


int main()
{
	// 桥接模式
	Computer *pa = new ComputerA();
	pa->setSoftware(new SoftwareGame());
	pa->run();
	delete pa;

	Computer *pb = new ComputerB();
	pb->setSoftware(new SoftwareNote());
	pb->run();
	delete pb;

	getchar();
	return 0;
}


优点:

桥接模式可以灵活组合,用来取代多层继承关系,避免多层继承引起的子类爆炸式增长;
桥接模式提高了系统可扩展性,某个维度上需要扩展时,只需增加实现类接口或者具体实现类,不影响另一个维度,符合开闭原则。


缺点:

难以理解,维度关系建立在抽象类层Computer类;

难点

准确识别系统中的两个维度是应用桥接模式的难点。


适用场景: 

一个类存在多个独立变化的维度,可采用桥接模式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值