桥接模式

简介

桥接模式:

将抽象部分与他的实现部分分离,是他们可以独立变化。

类图


组成对象

1Abstraction::Operation():定义要实现的操作接口

2AbstractionImplement::Operation():实现抽象类Abstaction所定义操作的接口,由其具体派生类ConcreteImplemenAConcreteImplemenA或者其他派生类实现。

3、在Abstraction::Operation()中根据不同的指针多态调用AbstractionImplement::Operation()函数。

常用的场景

1.当一个对象有多个变化因素的时候,考虑依赖于抽象的实现,而不是具体的实现。如上面例子中手机品牌有2种变化因素,一个是品牌,一个是功能。

2.当多个变化因素在多个对象间共享时,考虑将这部分变化的部分抽象出来再聚合/合成进来,如上面例子中的通讯录和游戏,其实是可以共享的。

3.当我们考虑一个对象的多个变化因素可以动态变化的时候,考虑使用桥接模式,如上面例子中的手机品牌是变化的,手机的功能也是变化的,所以将他们分离出来,独立的变化。

优点:

1.将实现抽离出来,再实现抽象,使得对象的具体实现依赖于抽象,满足了依赖倒转原则。

2.将可以共享的变化部分,抽离出来,减少了代码的重复信息。

3.对象的具体实现可以更加灵活,可以满足多个因素变化的要求。

缺点:

1.客户必须知道选择哪一种类型的实现。

测试代码

 

#include <iostream>
#include <assert.h>
#include <vector>
using namespace std;
#include <string>

#include <list>

//抽象
class FBaseSystem
{
public:
	virtual void run();
};

//实现
class FBaseSoftWare
{
public:
	virtual void running();
};


//具体抽象
class FWindowsSys : public FBaseSystem
{
public:
	FWindowsSys(FBaseSoftWare* softWare):
	  m_pSoftWare(softWare){};

	  void run()
	  {
		  m_pSoftWare->running();
	  };
private:
	FBaseSoftWare* m_pSoftWare;
};

//具体抽象
class FMACSys : public FBaseSystem
{
public:
	FMACSys(FBaseSoftWare* softWare):
	  m_pSoftWare(softWare){};

	  void run()
	  {
		  m_pSoftWare->running();
	  };

private:
	FBaseSoftWare* m_pSoftWare;
};

//具体实现
class FASoftWare : public FBaseSoftWare
{
public:
	void running();
};

class FBSoftWare : public FBaseSoftWare
{
public:
	void running();
};

void main()
{
	
	FWindowsSys* pWinSys = new FWindowsSys(new FASoftWare);
	pWinSys->run();

	FMACSys* pMacSys = new FMACSys(new FBSoftWare);
	pMacSys->run();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值