Bridge:桥接模式

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

      抽象与实现的分离方法,是借助耦合。

对于一个派生类而言,其从基类继承了抽象函数,并对抽象函数进行实现,这是常规的抽象与实现耦合的情况。

而,若将函数实现的功能代码抽出,放到一个特定的实现类里,并将该类对象作为派生类的成员变量。当派生类对继承的抽象函数进行实现时,就可以调用实现类对象的接口函数,从而实现了相同的效果。

如:

class Car
{
public:
	virtual void construct() = 0;
};

class TeslaCar : public Car
{
public:
	virtual void construct();
	{
		//进行制造;
	};
};
上面定义了 Car类,其有个虚函数 construct ()

派生类TeslaCar对虚函数construct()进行了实现。

若使用桥接模式,上面代码会变为下面的形式:

//将虚函数的功能抽出
class Construction
{
public:
	virtual void construct();
	{
		//进行制造;
	};
};

class Car
{
public:
	virtual void construct() = 0;
};

class TeslaCar : public Car
{
public:
	TeslaCar(Construction* construction)
	{
		_construction = construction;
	};
	//构造函数
	virtual void construct();
	{
		_construction->construct();
	};
private:
	Construction*   _construction;
};
这样,抽象和其实现就进行了分离。

1.    设现在要添加十个新的Car派生类

①   若采用原始的派生类实现功能的方式,,由于每个派生类都要实现construct()函数,且这些construct()函数都是相同的,那么就相当于出现了很多的重复代码,且该重复的规模会随着Car派生类的添加不断增大。

②   若采用桥接模式,由于实现类Construction可复用,所以只要添加派生类即可,派生类的construct()函数中的功能代码不用重复编写。

2.    设现在有十种Car派生类,其中有五种需要使用不同的另一种构造方式

①   若采用原始的派生类实现功能的方式,那么需要为这五种派生类依次修改construct()函数,且修改的内容相同。这样会做许多重复性工作。

②   若采用桥接模式,直接派生一个NewConstruction,将NewConstruction作为参数传入,修改就完成了。只需要创建一个新的类NewConstruction

 

因此,若抽象类及其子类需要变化(抽象部分变化),无需修改实现类;若实现部分变化,无需修改抽象类及其子类。同时,不同的抽象部分可以灵活地与不同的实现类进行组合,从而实现不同功能。

若抽象类有多种实现,那么使用桥接模式要远远优于继承。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值