您的位置:首页 > 文旅 > 美景 > 桥接模式(大话设计模式)C/C++版本

桥接模式(大话设计模式)C/C++版本

2024/12/25 0:33:45 来源:https://blog.csdn.net/m0_47104421/article/details/140264635  浏览:    关键词:桥接模式(大话设计模式)C/C++版本

桥接模式

在这里插入图片描述

C++

#include <iostream>
using namespace std;class HandsetSoft // 手机软件
{
public:virtual ~HandsetSoft() = default;virtual void Run() = 0;
};class HandsetGame : public HandsetSoft // 手机游戏
{
public:void Run() override{cout << "运行手机游戏!" << endl;}
};class HandsetAddressList : public HandsetSoft // 手机通讯录
{
public:void Run() override{cout << "运行手机通讯录!" << endl;}
};class HandsetBrand // 手机品牌类
{
protected:HandsetSoft *m_soft; // 手机品牌中包含着手机通讯录和手机游戏
public:virtual ~HandsetBrand() = default;void SetHandsetSoft(HandsetSoft *soft){m_soft = soft;}virtual void Run() = 0;
};class HandsetBrandN : public HandsetBrand // 手机品牌 N
{
public:void Run() override{m_soft->Run();}
};class HandsetBrandM : public HandsetBrand // 手机品牌M
{
public:void Run() override{m_soft->Run();}
};int main()
{cout << "手机品牌N:" << endl;HandsetBrand *abn = new HandsetBrandN();HandsetGame *hgn = new HandsetGame();abn->SetHandsetSoft(hgn);abn->Run();HandsetAddressList *haln = new HandsetAddressList();abn->SetHandsetSoft(haln);abn->Run();cout << endl<< "手机品牌M:" << endl;HandsetBrand *abm = new HandsetBrandM();HandsetGame *hgm = new HandsetGame();abm->SetHandsetSoft(hgm);abm->Run();HandsetAddressList *halm = new HandsetAddressList();abm->SetHandsetSoft(halm);abm->Run();delete abn;delete hgn;delete haln;delete abm;delete hgm;delete halm;return 0;
}

C

#include <stdio.h>// 手机软件抽象基类
typedef struct HandsetSoft
{void (*run)(struct HandsetSoft *self); // 虚函数表
} HandsetSoft;// 手机游戏类
typedef struct HandsetGame
{HandsetSoft base;
} HandsetGame;void run_game(HandsetSoft *self)
{printf("运行手机游戏!\n");
}// 手机通讯录类
typedef struct HandsetAddressList
{HandsetSoft base;
} HandsetAddressList;void run_address_list(HandsetSoft *self)
{printf("运行手机通讯录!\n");
}// 手机品牌基类
typedef struct HandsetBrand
{HandsetSoft *m_soft;
} HandsetBrand;void set_handset_soft(HandsetBrand *self, HandsetSoft *soft)
{self->m_soft = soft;
}// 手机品牌N类
typedef struct HandsetBrandN
{HandsetBrand base;
} HandsetBrandN;void run_brandN(HandsetBrand *self)
{self->m_soft->run(self->m_soft);
}// 手机品牌M类
typedef struct HandsetM
{HandsetBrand base;
} HandsetM;void run_brandM(HandsetBrand *self)
{self->m_soft->run(self->m_soft);
}int main()
{// 初始化手机软件HandsetSoft game_software = {.run = run_game};HandsetSoft address_list_software = {.run = run_address_list};HandsetGame game = {.base = game_software};HandsetAddressList address_list = {.base = address_list_software};// 初始化手机品牌NHandsetBrandN brandN = {};set_handset_soft((HandsetBrand *)&brandN, (HandsetSoft *)&game);printf("手机品牌N:\n");run_brandN((HandsetBrand *)&brandN);set_handset_soft((HandsetBrand *)&brandN, (HandsetSoft *)&address_list);run_brandN((HandsetBrand *)&brandN);// 初始化手机品牌MHandsetM brandM = {};set_handset_soft((HandsetBrand *)&brandM, (HandsetSoft *)&game);printf("\n手机品牌M:\n");run_brandM((HandsetBrand *)&brandM);set_handset_soft((HandsetBrand *)&brandM, (HandsetSoft *)&address_list);run_brandM((HandsetBrand *)&brandM);return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com