网站弄论坛形式怎么做,建设银行苏州网站,网站 预算,检察院做网站的目的运行在VS2022#xff0c;x86#xff0c;Debug下。
31. 中介者模式 中介者模式允许对象之间通过一个中介者对象进行交互#xff0c;而不是直接相互引用。可以减少对象之间的直接耦合#xff0c;同时集中化管理复杂的交互。应用#xff1a;如在游戏开发中#xff0c;可以使…运行在VS2022x86Debug下。
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_castGameObject*(data));}//...}void setGameObjects(const vectorGameObject* objects) { gameObjects objects;}private:vectorGameObject* 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;
}