适配器模式(大话设计模式)C/C++版本

适配器模式

在这里插入图片描述

C++

#include <iostream>
using namespace std;
// 球员
class Player
{
protected:string name;public:Player(string name) : name(name) {}virtual void Attack() = 0;virtual void Defense() = 0;virtual ~Player() {}
};
// 前锋
class Forwards : public Player
{
public:Forwards(string name) : Player(name) {}virtual void Attack(){cout << "前锋 " << name << "进攻" << endl;}virtual void Defense(){cout << "前锋 " << name << "防守" << endl;}
};// 中锋
class Center : public Player
{
public:Center(string name) : Player(name) {}virtual void Attack(){cout << "中锋 " << name << "进攻" << endl;}virtual void Defense(){cout << "中锋 " << name << "防守" << endl;}
};// 后卫
class Guards : public Player
{
public:Guards(string name) : Player(name) {}virtual void Attack(){cout << "后卫 " << name << "进攻" << endl;}virtual void Defense(){cout << "后卫 " << name << "防守" << endl;}
};class ForeignCenter
{
public:void SetName(string name){this->name = name;}string GstName(){return name;}void ForeignAttack(){cout << "外籍中锋 " << name << " 进攻" << endl;}void ForeignDefense(){cout << "外籍中锋 " << name << " 防守" << endl;}private:string name;
};// 适配器类 翻译者
class Translator : public Player
{
public:Translator(string name) : Player(name){ym = new ForeignCenter;ym->SetName(name);}~Translator(){if (ym != NULL)delete ym;}void Attack(){ // 翻译者将Attack 翻译成 ForeignAttackym->ForeignAttack();}void Defense(){ym->ForeignDefense(); // 翻译者将Defense 翻译成 ForeignDefense}private:ForeignCenter *ym; // 外籍中锋
};
int main()
{Player *b = new Forwards("巴蒂尔");b->Attack();Player *c = new Guards("麦克格雷迪");c->Attack();Player *ym = new Translator("姚明"); // 姚明问: "Attack和Defense是什么意思?"ym->Attack();ym->Defense();return 0;
}

C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef struct Player
{char name[50];void (*attack)(const char *);void (*defense)(const char *);
} Player;typedef struct Forwards
{Player base;
} Forwards;typedef struct Center
{Player base;
} Center;typedef struct Guards
{Player base;
} Guards;typedef struct ForeignCenter
{char name[50];
} ForeignCenter;typedef struct Translator
{Player base;ForeignCenter *foreignCenter;
} Translator;void forwards_attack(const char *name)
{printf("前锋 %s 进攻\n", name);
}void forwards_defense(const char *name)
{printf("前锋 %s 防守\n", name);
}void center_attack(const char *name)
{printf("中锋 %s 进攻\n", name);
}void center_defense(const char *name)
{printf("中锋 %s 防守\n", name);
}void guards_attack(const char *name)
{printf("后卫 %s 进攻\n", name);
}void guards_defense(const char *name)
{printf("后卫 %s 防守\n", name);
}void foreign_center_attack(ForeignCenter *fc)
{printf("外籍中锋 %s 进攻\n", fc->name);
}void foreign_center_defense(ForeignCenter *fc)
{printf("外籍中锋 %s 防守\n", fc->name);
}Player *create_forwards(const char *name)
{Player *p = (Player *)malloc(sizeof(Player));strcpy(p->name, name);p->attack = forwards_attack;p->defense = forwards_defense;return p;
}Player *create_center(const char *name)
{Player *p = (Player *)malloc(sizeof(Player));strcpy(p->name, name);p->attack = center_attack;p->defense = center_defense;return p;
}Player *create_guards(const char *name)
{Player *p = (Player *)malloc(sizeof(Player));strcpy(p->name, name);p->attack = guards_attack;p->defense = guards_defense;return p;
}Translator *create_translator(const char *name)
{Translator *t = (Translator *)malloc(sizeof(Translator));strcpy(t->base.name, name);t->foreignCenter = (ForeignCenter *)malloc(sizeof(ForeignCenter));strcpy(t->foreignCenter->name, name);t->base.attack = (void (*)(const char *))foreign_center_attack;t->base.defense = (void (*)(const char *))foreign_center_defense;return t;
}void player_free(Player *p)
{free(p);
}void translator_free(Translator *t)
{if (t->foreignCenter)free(t->foreignCenter);free(t);
}int main()
{Player *b = create_forwards("巴蒂尔");b->attack(b->name);Player *c = create_guards("麦克格雷迪");c->attack(c->name);Translator *ym = create_translator("姚明");ym->base.attack(ym->base.name);ym->base.defense(ym->base.name);player_free(b);player_free(c);translator_free(ym);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/31109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20240613解决飞凌的OK3588-C的核心板的USB3.0接口不读U盘的问题

20240613解决飞凌的OK3588-C的核心板的USB3.0接口不读U盘的问题 2024/6/13 15:21 缘起&#xff0c;由于USB3.0的CC芯片在飞凌的OK3588-C的开发板的底板上&#xff0c;一切正常。 如果你单独使用核心板&#xff0c;很容易出现这个问题【省成本没有使用CC芯片】&#xff1a;不读U…

300PLC连接Modbus转Profibus网关与阀岛modbusRTU通讯

一、概况 300PLC作为常见的控制器设备&#xff0c;在与阀岛Modbus RTU通讯时&#xff0c;通常需要借助Modbus转Profibus网关&#xff08;XD-MDPB100&#xff09;来实现连接和数据交换。PLC通过Modbus转Profibus网关&#xff08;XD-MDPB100&#xff09;与阀岛Modbus RTU通讯是比…

labelme使用笔记:目标检测数据集标注和语义分割数据集批量生成

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享&#xff0c;包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…

[AIGC] 使用Google的Guava库中的Lists工具类:常见用法详解

在Java程序设计中&#xff0c;集合是我们最常用的数据结构之一。为了方便我们操作集合&#xff0c;Google的Guava库提供了一个名为Lists的工具类&#xff0c;它封装了许多用于操作List对象的实用方法。在本文中&#xff0c;我们将详细介绍其常见的用法&#xff0c;以帮助您更好…

PyQt5 生成py文件不能运行;pushButton点击事件;QTextEdit 获取输入框内容

目录 cant open file c.pyuic: c.pyuic $FileName$ -o $FileNameWithoutExtension$.p PyQt5 生成py文件不能运行 pushButton点击事件 QTextEdit 获取输入框内容 整体运行代码: Creating a Qt Widget Based Application | Qt Creator Manual cant open file c.pyuic: c.…

NAT Easyip实验

我们这篇博客将重点讲述easy ip的配置&#xff1a; 以下面的一个简单的实验拓扑图为例&#xff1a; 本实验使用的网络地址&#xff1a; 1. 我们先来完成基础配置&#xff1a; 1.1AR1的基础配置&#xff1a; 1.2AR2上的基础配置 1.3完成AR1和AR2的基础配置后&#xff0c;我们…

rust数据类型

目录 一&#xff0c;基本类型 1&#xff0c;基本类型 &#xff08;1&#xff09;整数类型 &#xff08;2&#xff09;浮点数 &#xff08;3&#xff09;bool类型 &#xff08;4&#xff09;char类型 2&#xff0c;基本类型的代数结构 二&#xff0c;复合类型 1&#x…

这些帮助你成长的IOS应用,建议收藏

TrackIt TrackIt是一款功能丰富的任务清单、日程管理和习惯打卡应用&#xff0c;旨在帮助用户提高效率和专注力。通过这些功能&#xff0c;用户可以更好地规划时间和任务&#xff0c;从而实现个人目标和养成良好习惯。 在目标设定方面&#xff0c;SMART原则是一个常用的方法&a…

【决战欧洲之巅】丹麦 vs 英格兰战术分析和球员状态以及走地数据分析

丹麦 vs 英格兰战术分析和球员状态 阵型与战术 丹麦: 阵型:丹麦通常采用4-3-3阵型&#xff0c;以因防守为基础&#xff0c;同时通过快速反击等找机会。 ”战术: 防守:丹麦在防守时以紧密的四后卫体彩为核心&#xff0c;辅以中场球员的积极回防&#xff0c;形成稳因的防 线。…

解决HassOS无法获取ip地址问题

目录 问题描述解法 问题描述 在ESXi中安装完HassOS后&#xff0c;开机遇到一个无法获取ip地址的问题&#xff0c;如下图所示&#xff1a; 输入network info命令&#xff0c;显示ipv4已被禁用&#xff0c;如下图所示&#xff1a; 解法 在控制台ha >后输入下面命令 netw…

基于Java技术“漫画之家”系统

开头语&#xff1a;你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术&#xff0c;B/S结构&#xff0c;SpringBoot框架 工具&#xff1a;MyEc…

板凳--------第60章 SOCKET:服务器设计

60.1 迭代型和并发型服务器 1016 1.迭代型&#xff1a; 服务器每次只处理一个客户端&#xff0c;只有当完全处理完一个客户端的请求后才会去处理下一个客户端。只适用于快速处理客户端请求的场景&#xff0c;因为每个客户端都必须等待&#xff0c;直到前面所有的客户端都处理完…

一键批量复制至指定文件夹,轻松实现同名文件覆盖,数据管理更高效!

在数字化时代&#xff0c;文件的管理与复制是每位电脑用户都不可避免的日常工作。你是否曾因为大量文件的复制与更新而焦头烂额&#xff1f;是否曾因为同名文件的冲突而不知所措&#xff1f;别担心&#xff0c;现在&#xff0c;我们为您带来高效文件复制管理的秘诀&#xff0c;…

【管理咨询宝藏132】国际顶级咨询公司战略组织运营报告套装

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏132】国际顶级咨询公司战略&组织&运营报告套装 【格式】PDF版本 【关键词】德勤、罗兰贝格、外资咨询、战略规划、组织管控、运营提升、…

HNU操作系统2022期中考试试卷及参考答案

一、&#xff08;20分&#xff0c;每小题5分&#xff09;简答题 &#xff08;1&#xff09;通过多任务共享实现的虚拟化CPU与通常虚拟机&#xff08;VMware等&#xff09;里所使用的虚拟化技术有什么不一样&#xff1f; 多任务共享实现的虚拟化CPU通常指的是在操作系统层面&am…

证书速览|CCSK云计算安全知识认证

随着云计算技术的发展&#xff0c;现在越来越多的企业感受到云的好处&#xff0c;把业务逐渐转移到云上。上云是大势所趋&#xff0c;也是现今企业发展的实际需要。 这就意味着企业会更青睐于具备云安全专业知识、技能与经验的人员。 CCSK 云计算安全知识认证&#xff0c;是由…

【学习笔记】Maven高级01:POM深入了解

文章目录 一、POM的四个层次超级POM父POM当前POM有效POM(effective pom) 二、属性的声明和引用使用 mvn help:evaluate查看属性通过Maven访问系统属性1、访问Java系统属性2、访问系统属性4、访问系统环境变量5、访问project属性访问一级标签访问子标签访问标签列表 6、访问全局…

c++里 父类私有的虚函数,也是可以被子类重写和继承的。但父类私有的普通函数,子类无法直接使用

谢谢 。今天看课本上有这么个用法&#xff0c;特测试一下。这样就也可以放心的把父类的私有函数列为虚函数了&#xff0c;或者说把父类的虚函数作为私有函数了。 再补充一例&#xff1a;

2024-06月 | 维信金科 | 风控数据岗位推荐,高收入岗位来袭!

今日推荐岗位&#xff1a;策略分析经理/分析专家、贷前、中策略分析、风控模型分析。 风控部门是金融业务的核心部门&#xff0c;而从事风控行业的人即称之为风险管理者。是大脑&#xff0c;是最最最重要的部门之一。今日推荐岗位的核心技能分布如下&#xff1a; 简历发送方式…

如何使用ChatGPT辅助设计工作

文章目录 设计师如何使用ChatGPT提升工作效率&#xff1f;25个案例告诉你&#xff01;什么是 prompt&#xff1f;咨询信息型 prompt vs 执行任务 prompt编写出色 prompt 的基本思路撰写 prompt 的案例和技巧1、将 ChatGPT 视作专业人士2、使用 ChatGPT 创建表单3、使用 ChatGPT…