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

南京网站定制开发优秀网页设计

南京网站定制开发,优秀网页设计,网络推广计划书目录,电商网站开发面试运行在VS2022,x86,Debug下。 31. 中介者模式 中介者模式允许对象之间通过一个中介者对象进行交互,而不是直接相互引用。可以减少对象之间的直接耦合,同时集中化管理复杂的交互。应用:如在游戏开发中,可以使…

运行在VS2022,x86,Debug下。

31. 中介者模式

在这里插入图片描述

  • 中介者模式允许对象之间通过一个中介者对象进行交互,而不是直接相互引用。可以减少对象之间的直接耦合,同时集中化管理复杂的交互。
  • 应用:如在游戏开发中,可以使用中介者模式来管理游戏对象之间的碰撞检测。这意味着当一个游戏对象需要检测与其他对象的碰撞时,它不需要直接与其他所有游戏对象进行交互,而是通过中介者来进行交互。
  • 实现
    • 同事接口,定义中介者对象,用来调用中介者的接口。
    • 具体同事类。
    • 中介者接口,定义让同事类操作的接口。
    • 具体中介者,定义所有同事类对象,负责同事类对象之间的交互。
  • 代码如下。
class GameMediator;//同事类:游戏对象类
class GameObject 
{
protected:GameMediator* gameMediator;string objectName;public:GameObject(GameMediator* mediator,const string& name): gameMediator(mediator), objectName(name){}string getName() const { return objectName; }virtual void HandleCollision(GameObject* other) = 0; //处理碰撞
};//中介者:游戏中介类
class GameMediator
{
public:virtual void notify(const string& event, void* data) = 0; //事件通知
};//具体同事类:玩家类
class Player : public GameObject
{
public:Player(GameMediator* mediator, const string& name) : GameObject(mediator,name) {}void jump() {cout << getName() << " is jumping!" << endl;gameMediator->notify("collision", this); //由中介者调用碰撞检测函数}void HandleCollision(GameObject* other){cout << getName() << " took damage and collided with " << other->getName() << endl;}
};//具体同事类:障碍物类
class Obstacle : public GameObject 
{
public:Obstacle(GameMediator* mediator, const string& name) : GameObject(mediator, name) {}void movement(){cout << getName() << " is moving!" << endl;gameMediator->notify("collision", this); //由中介者调用碰撞检测函数}void HandleCollision(GameObject* other){cout << getName() << " collided with " << other->getName() << endl;}
};// 具体中介者: 游戏引擎类
class GameEngine : public GameMediator
{
public:void notify(const string& event, void* data) //根据事件通知相关的子系统{if (event == "collision") {CheckCollision(static_cast<GameObject*>(data));}//...}void setGameObjects(const vector<GameObject*>& objects) { gameObjects = objects;}private:vector<GameObject*> gameObjects;void CheckCollision(GameObject* source) const{//检测与所有游戏对象之间的碰撞for (auto&& target : gameObjects) {if (source != target){//如果发生碰撞,由游戏对象调用处理碰撞函数source->HandleCollision(target);}}}
};int main()
{//创建中介者GameEngine GEmediator;//创建各游戏对象Player player(&GEmediator, "Player");Obstacle Crates(&GEmediator, "Crates");Obstacle Trees(&GEmediator,"Trees");Obstacle Cars(&GEmediator, "Cars");//中介者管理所有游戏对象, 负责所有游戏对象之间的交互GEmediator.setGameObjects({ &player, &Crates, &Trees, &Cars });//游戏对象移动player.jump();Cars.movement();return 0;
}
http://www.hkea.cn/news/510464/

相关文章:

  • 南宁做网站的有几家东莞网络营销网站建设
  • 苏州知名网站建设开发新区seo整站优化公司
  • 政府建设网站计划书品牌营销策略包括哪些内容
  • 深圳市做网站百度seo排名点击器app
  • 五莲网站建设维护推广网络营销推广及优化方案
  • 重庆网红整站多关键词优化
  • 动易网站cms一级消防工程师考试
  • wordpress更新报错想找搜索引擎优化
  • 提供网站建设费用资源网
  • wordpress怎么使用主题seo优化评论
  • 柳州做网站如何建网站详细步骤
  • 黄岛做网站哪家好四川seo关键词工具
  • dede门户网站模版写软文推广
  • 网站开发者排名开发一个app平台大概需要多少钱?
  • 做网站 博客百度推广助手客户端
  • 温州市手机网站制作哪家好爱站网长尾词挖掘
  • 党委网站建设要求凡科建站靠谱吗
  • wordpress 安卓客户端福建seo优化
  • 襄阳seo技术长沙seo网站优化
  • 做一的同志小说网站做seo要投入什么
  • 网站的文件结构百度搜索排名怎么收费
  • 全景网站app网络营销工具分析
  • 南京建设工程交易中心网站seo是什么的简称
  • 利用vps做网站关键字排名查询
  • 常熟网站制作找哪家好品牌型网站制作价格
  • 怎么做自己网站推广网络广告
  • 化州网站建设促销方法100种
  • 长沙专业网站设计平台新闻最新消息10条
  • 惠州网站建设制作宣传推广方案
  • 宁波网站推广外包服务长岭网站优化公司