您的位置:首页 > 其它

桥接模式-抽象与实现的分离

2010-03-27 21:38 399 查看
说到桥接模式,其最基本的目的就是要达到抽象部分与实现部分的相分离,使他们每一部分都能够独立的变化。然而,这句话还是不好理解的。套用大话设计模式的一句话,所谓的实现和抽象相分离,就是实现一个系统,有可能有多个角度对系统进行分类,而这其中的每一个角度都有可能发生变化,而桥接模式把这多个角度抽离出来实现,以便其独立的变化。就像手机一样,可以用牌子给他归类,也可以按不同的软件,如MP3给他归类,就像下面的例子代码,若要添加一个品牌,所需要做的就是从牌子的基类派生一个具体的子类来实现,若要添加一个软件的话,从软件基类派生一个子类来实现便可以了,而不会影响其他的类。手机软件和手机牌子是一个聚合关系。(实际上下面的游戏类也可以独立出一个类层次来)。

// tEST.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include <iostream>
using namespace std;

//手机类的品牌的抽象接口,手机从品牌角度的一个分类
class CBrand
{
public:
CBrand(){};
virtual ~CBrand(){};

virtual void Display() = 0;
};

//M品牌手机的实现
class CMotoBrand:public CBrand
{
public:
CMotoBrand(){};
virtual ~CMotoBrand(){};

virtual void Display();
};

void CMotoBrand::Display()
{
cout<<"Welcome to Moto"<<endl;
}

//N品牌的手机的实现
class CNokiaBrand:public CBrand
{
public:
CNokiaBrand(){};
virtual ~CNokiaBrand(){};

virtual void Display();
};

void CNokiaBrand::Display()
{
cout<<"Welcome to Nokia"<<endl;
}

//手机的另一个角度的实现,手机软件的抽象类
class CSoftWare
{
public:
CSoftWare(CBrand* cb):m_brand(cb){};
CSoftWare(){};
virtual ~CSoftWare(){};

virtual void Display() = 0;

protected:
CBrand* m_brand;
};

//手机软件中的MP3功能的实现
class CMp3:public CSoftWare
{
public:
CMp3(CBrand* cb):CSoftWare(cb){};
CMp3(){};
virtual ~CMp3(){};

virtual void Display();
};

void CMp3::Display()
{
m_brand->Display();

cout<<"Play MP3"<<endl;
}

//手机软件中的游戏功能的实现
class CGame:public CSoftWare
{
public:
CGame(CBrand* cb):CSoftWare(cb){};
CGame(){};
virtual ~CGame(){};

virtual void Display();
};

void CGame::Display()
{
m_brand->Display();

cout<<"Play Game"<<endl;
}

int main()
{
//带MP3功能的M品牌手机
CBrand* brand = new CMotoBrand;
CSoftWare* soft = new CMp3(brand);
soft->Display();
delete brand;
delete soft;

//带游戏功能的N品牌手机
brand = new CNokiaBrand;
soft = new CGame(brand);
soft->Display();
delete brand;
delete soft;

int a = 0;
cin>>a;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: