桥接模式是什么?

一、使用场景

拿电脑来举例子。电脑有微软的电脑,联想的电脑。而电脑上可以运行游戏,也可以运行记事本等软件。有两种方式可以实现电脑产品,如下:

方式一:

这种方式耦合性太高,比如像添加一种软件,需要添加微软电脑的软件和联想电脑的软件。同样的像添加一种电脑,也要添加相应的软件。如果要修改一种软件,则要修改很多软件。

方式二,那就是电脑是电脑,软件是软件两者分离。如下图:

很明显方式二耦合性底,容易维护和扩展。这里电脑就相当于抽线,而软件则相当于实现。总的来说就是桥接模式主要是实现系统可能有多个角度分类,每一种分类都有可能变化。那么就把这种多角度分离出来

让它们独立变化,减少它们之间的耦合。

 

二、定义

多个角度看问题,每一个角度有一个抽象类,抽象类底下具体的类即是各个角度看问题看到的具体内容,同时不同角度看问题的基类是用组合的形式联系起来的,这样子可以替代多个类之间频繁继承的现象,减少类的个数,同时避免因为不断继承打破开闭原则。

 

三、代码

以电脑和软件为例其示例代码如下:

// BridgeModel.h文件
#pragma once
#include <iostream>

class Software
{
public:
	virtual void run() = 0;
};

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

class SoftwareNote : public Software
{
public:
	void run()
	{
        std::cout << "记事本软件" << std::endl;
	}
};
//
class Computer
{
protected:
	Software * 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 ComputerLenovo : public Computer
{
public:
	void run()
	{
		std::cout << "联想的电脑运行";
		m_software->run();
	}
};

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

客户端代码如下:

#include <iostream>
#include "BridgeModel.h"

int main()
{
	using namespace std;
	// 桥接模式
	Computer *p = new ComputerLenovo();
	p->setSoftware(new SoftwareGame());
	p->run();
	delete p;
	
	p = new ComputerMirco();
	p->setSoftware(new SoftwareNote());
	p->run();
	delete p;

	getchar();
	return 0;
}

 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值