时间:2016年9月29日 天气:晴:sunny:
Author:冬之晓:angry:
Email: 347916416@qq.com
今天是九月工作的最后一天,自从工作以来,一直感觉没太大激情,主要是完全没有目标和方向,不知道自己未来应该干嘛! 明天就要回家了,回家之后要好好想想。晚上,为了纪念我回家,和同事一起在余姚的本地小店吃了一顿,味道很不错! 很感谢泉庆带我来了一个好地方吃饭!
设计模式(二十二)————桥接模式
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化
今天使用不同品牌的手机和在其上面安装不同的应用举例子:
#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