同事胡泉庆请客吃饭

2016/9/29 吃饭

Posted by WangXiaoDong on September 29, 2016

时间: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