当前位置: 首页 > news >正文

【设计模式】桥接模式

来源:爱编程的大丙

定义:将抽象部分和它的实现部分实现部分分离,使它们可以独立变化,这种处理模式就是桥接模式。

#include<iostream>
#include<map>
#include<string>
using namespace std;//人员信息
struct Person {//使用 string biezhu=string()// 可以让 Person 类的构造函数更灵活,调用者可以选择是否提供 biezhu 参数。Person(string name, string job, string ablity, string reward, string biezhu = string()){this->name = name;this->job = job;this->ability = ability;this->reward = reward;this->beiZhu = biezhu;}~Person() {cout << name << "被析构..." << endl;}string name;    // 名字string job;     // 职责string ability; // 能力string reward;  // 赏金string beiZhu;  // 备注
};//抽象船队
class AbstractTeam {
public:AbstractTeam(string name) :m_teamName(name) {}string getTeamName(){return m_teamName;}void addMember(Person* p) {m_infoMap.insert(make_pair(p->name, p));}void show() {cout << m_teamName << endl;for (const auto& item : m_infoMap) {cout << "【Name: " << item.second->name<< ", Job: " << item.second->job<< ", Ability: " << item.second->ability<< ", MoneyReward: " << item.second->reward<< ", BeiZhu: " << item.second->beiZhu<< "】" << endl;}}virtual void executeTask() = 0;virtual ~AbstractTeam() {for (const auto& item : m_infoMap) {delete item.second;}}
protected:string m_teamName;map<string, Person*>m_infoMap;
};class CaoMaoTeam :public AbstractTeam {
public:using AbstractTeam::AbstractTeam;void executeTask() override {cout << "在海上冒险,找到 ONE PIECE 成为海贼王!" << endl;}
};class SmokerTeam :public AbstractTeam {
public:using AbstractTeam::AbstractTeam;void executeTask() override {cout << "为了正义, 先将草帽一伙一网打尽!!!" << endl;}
};class AbstractShip {
public:AbstractShip(AbstractTeam* team) :m_team(team) {}//桥梁,聚合关系void showTeam() {m_team->show();m_team->executeTask();}virtual string getName() = 0;virtual void feature() = 0;virtual ~AbstractShip() {}
protected:AbstractTeam* m_team = nullptr;
};class MerryShip :public AbstractShip {
public:using AbstractShip::AbstractShip;string getName() override {return string("前进·梅利号");}void feature()override {cout<<getName()<<" -- 船首为羊头, 在司法岛化身船精灵舍己救下了草帽一伙!" << endl;}
};class HaiJunShip :public AbstractShip {
public:using AbstractShip::AbstractShip;string getName() override {return string("无敌号");}void feature()override {cout << getName() << " -- 船底由海楼石建造, 可以穿过无风带的巨大炮舰!" << endl;}
};int main() {//草帽海贼团CaoMaoTeam* caomao = new CaoMaoTeam("草帽海贼团");Person* luffy=new Person("路飞", "船长", "橡胶果实能力者", "30亿贝里", "爱吃肉");Person* zoro = new Person("索隆", "剑士", "三刀流", "11亿1100万贝里", "路痴");Person* sanji = new Person("山治", "厨师", "隐形黑", "10亿3200万贝里", "好色");Person* nami = new Person("娜美", "航海士", "天候棒+宙斯", "3亿6600万贝里", "喜欢钱");caomao->addMember(luffy);caomao->addMember(luffy);caomao->addMember(zoro);caomao->addMember(sanji);caomao->addMember(nami);MerryShip* sunny = new MerryShip(caomao);sunny->feature();sunny->showTeam();// 斯摩格的船队SmokerTeam* team = new SmokerTeam("斯摩格的海军部队");Person* smoker = new Person("斯摩格", "中将", "冒烟果实能力者", "", "爱吃烟熏鸡肉");Person* dasiqi = new Person("达斯琪", "大佐", "一刀流", "", "近视");team->addMember(smoker);team->addMember(dasiqi);HaiJunShip* ship = new HaiJunShip(team);ship->feature();ship->showTeam();delete caomao;delete sunny;delete team;delete ship;return 0;
}

相关文章:

  • 小皮面板中访问不了本地的sqli网站---解决方法
  • 【Andoird开发】android获取蓝牙权限,搜索蓝牙设备MAC
  • Reactor设计模式
  • P3128 [USACO15DEC] Max Flow P题解(树上差分,最近公共祖先,图论)
  • Golang | Leetcode Golang题解之第111题二叉树的最小深度
  • Python | Leetcode Python题解之第111题二叉树的最小深度
  • Python基础学习笔记(七)——元组
  • python从入门到精通02
  • SELINUX=enforcing时无法启动httpd服务的解决方案(semanage命令以及setroubleshoot-server插件的妙用)
  • 门禁-jenkins的构建状态同步到gitlab提交流水线
  • C++中的模板类的定义与使用
  • win11 通过防火墙设置-开通本地端口
  • Linux Tcpdump抓包入门
  • 汇编实现的操作系统
  • k8s二进制安装与部署
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • ES学习笔记(12)--Symbol
  • Map集合、散列表、红黑树介绍
  • Mithril.js 入门介绍
  • Python实现BT种子转化为磁力链接【实战】
  • React系列之 Redux 架构模式
  • web标准化(下)
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 聚类分析——Kmeans
  • 力扣(LeetCode)965
  • 数组大概知多少
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • #FPGA(基础知识)
  • #pragma once
  • #预处理和函数的对比以及条件编译
  • $forceUpdate()函数
  • $nextTick的使用场景介绍
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (145)光线追踪距离场柔和阴影
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (TOJ2804)Even? Odd?
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (分布式缓存)Redis持久化
  • (剑指Offer)面试题34:丑数
  • (学习日记)2024.01.19
  • (一)Java算法:二分查找
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NET大文件上传知识整理
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • /var/spool/postfix/maildrop 下有大量文件
  • @Query中countQuery的介绍
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [20181219]script使用小技巧.txt
  • [AIGC] Kong:一个强大的 API 网关和服务平台