您的位置:首页 > 其它

设计模式学习(二十二)————桥接模式

2016-10-01 08:38 281 查看
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化

今天使用不同品牌的手机和在其上面安装不同的应用举例子:

#ifndef MOBILE_H
#define MOBILE_H

#include <QDebug>

class HandsetSoft   //手机软件抽象类
{
public:
virtual void Run() = 0;
virtual ~HandsetSoft(){}
};

class HandsetGame final : public HandsetSoft   //手机游戏
{
public:
void Run() override
{
qDebug()<<"运行手机游戏";
}
};

class HandsetAddressList final : public HandsetSoft
{
public:
void Run() override
{
qDebug()<<"运行手机通讯录";
}
};

class HandsetMP3 final : public HandsetSoft
{
public:
void Run() override
{
qDebug()<<"运行手机MP3播放";
}
};

class HandsetBrand   //手机品牌抽象类
{
public:
virtual void Run() = 0;
void setHandsetSoft(HandsetSoft * soft)
{
_soft = QSharedPointer<HandsetSoft>(soft);
}
virtual ~HandsetBrand(){}
protected:
QSharedPointer<HandsetSoft> _soft;
};

class HandsetBrandN final : public HandsetBrand
{
public:
void Run() override
{
qDebug()<<"N类型的手机:";
_soft->Run();
}
};

class HandsetBrandM final : public HandsetBrand
{
public:
void Run() override
{
qDebug()<<"M类型的手机:";
_soft->Run();
}
};

class HandsetBrandS final : public HandsetBrand
{
public:
void Run() override
{
qDebug()<<"S类型的手机:";
_soft->Run();
}
};

#endif // MOBILE_H


有了手机和软件,就可以在主程序中将不同的软件加载到不同的手机中了:

#include "mobile.h"

int main()
{
HandsetBrand *ab = new HandsetBrandN;

ab->setHandsetSoft(new HandsetGame());
ab->Run();

ab->setHandsetSoft(new HandsetAddressList());
ab->Run();

delete ab;

ab = new HandsetBrandM;

ab->setHandsetSoft(new HandsetGame());
ab->Run();

ab->setHandsetSoft(new HandsetAddressList());
ab->Run();

return 0;
}


根据程序可以看出,使用桥接模式,可以将手机的抽象和软件的抽象分开,然后在增加新类型的手机和新的软件时相互并不影响,独立的变化带来的好处就体现在了这种模式中!

最后放上源码地址:https://github.com/Dongzhixiao/designMode_qt/tree/master/MobileSoftware_Bridge_pattern_22
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: