代码设计模式之桥接模式(bridge)

 

优点:

1、Bridge 模式把两个角色之间的继承关系改为了耦合的关系,从而使这两者可以从容自若的各自独立的变化。

2、桥接模式分离了抽象部分和实现部分,从而极大地提高了系统的灵活性。让抽象部分和实现部分独立开来,分别定义接口,这有助于对系统进行分层,从而产生更好的结构化的系统。对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了。

3、由于桥接模式把抽象部分和实现部分分离开了,而且分别定义接口,这就使得抽象部分和实现部分可以分别独立地扩展,而不会相互影响,从而大大地提高了系统的可扩展性。

4、由于桥接模式把抽象部分和实现部分分离开了,所以在实现桥接的时候,就可以实现动态的选择和使用具体的实现。也就是说一个实现不再是固定的绑定在一个抽象接口上了,可以实现运行期间动态地切换。

 

缺点:

桥接功能需要使用一组接口,每实现一种业务必须先定义接口,实现桥接功能的代码量与业务复杂程度成正比。

 

适用性:

1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。
2、设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。
3、一个构件有多于一个的抽象化角色和实现化角色,系统需要它们之间进行动态耦合。
4、虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。

5、一个构件具体相同的行为属性,适合于不同维度的变化(每种维度具有相同的行为)。

例子:

有电脑A和电脑B,有游戏软件CS和WC。现在A可以按装CS或WC,B也同样可以按装CS或WC。A,B能运行哪种软件,取决于,安装了哪种软件。而软件的更新品种不影响到具体的哪台电脑,电脑还是可以正常使用,而添加新电脑也不会影响到新软件的开发。各不相关。

如果想在一台电脑上按装几种软件,需要将电脑升级为多任务。即对电脑进行修改。

 

类图:

 

从类图可以看到,用户可以任意自行的将软件安在A或B。

 

computer.h

/**************************************************************  
  
        filename : computer.h  
  
        author: fengsh  
        QQ:19985430  
        blog :http://blog.csdn.net/fengsh998  
  
  
        Bridge Demo  
*************************************************************/
#ifndef COMPUTER_H
#define COMPUTER_H
#include "soft.h"

class CComputer
{
public:
	CComputer(void);
	~CComputer(void);

	virtual void setupSoft(Soft* soft)=0;
	virtual void runSoft()=0;
protected:
	Soft* m_soft;
};


class Lenovo : public CComputer
{
public:
	Lenovo(){};
	~Lenovo(){};
	void setupSoft(Soft* soft);
	void runSoft();
};

class Dell : public CComputer
{
public:
	Dell(){};
	~Dell(){};
	void setupSoft(Soft* soft);
	void runSoft();
};

#endif


computer.cpp

#include "StdAfx.h"
#include "computer.h"

CComputer::CComputer(void)
{

}

CComputer::~CComputer(void)
{
}

void Lenovo::setupSoft( Soft* soft )
{
	m_soft = soft;
}

void Lenovo::runSoft()
{
	m_soft->run();
}

void Dell::setupSoft( Soft* soft )
{
	m_soft = soft;
}

void Dell::runSoft()
{
	m_soft->run();
}


soft.h

/**************************************************************  
  
        filename : soft.h  
  
        author: fengsh  
        QQ:19985430  
        blog :http://blog.csdn.net/fengsh998  
  
  
        Bridge Demo  
*************************************************************/
#ifndef SOFT_H
#define SOFT_H


class Soft
{
public:
	Soft(void);
	~Soft(void);

	virtual void run()=0;
};

class Cs : public Soft
{
public:
	Cs(){};
	~Cs(){};
	void run();
};

class Wc : public Soft
{
public:
	Wc(){};
	~Wc(){};
	void run();
};

#endif


soft.cpp

#include "StdAfx.h"
#include "soft.h"
#include "iostream"

Soft::Soft(void)
{
}

Soft::~Soft(void)
{
}

void Cs::run()
{
	std::cout<<"CS Run."<<std::endl;
}

void Wc::run()
{
	std::cout<<"WC Run."<<std::endl;
}


客户调用演示

#include "stdafx.h"
#include "stdlib.h"
#include "computer.h"
#include "soft.h"

int _tmain(int argc, _TCHAR* argv[])
{

	CComputer * lenovo = new Lenovo();

	Soft * cs = new Cs();
	Soft * wc = new Wc();

	lenovo->setupSoft(wc);
	lenovo->runSoft();

	delete cs;
	delete wc;

	delete lenovo;

	system("pause");
	return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

边缘998

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值