Unity23种设计模式之 中介者模式
·
1.什么是中介者模式?
中介者模式是一种行为型设计模式,通关引入一个“中介者对象”,封装对象之间的交互,从而让各个对象之间不再彼此引用,降低耦合。
简单理解:之前聊天是面对面,现在是通过中介。
2.为什么需要中介者模式?
UI、角色、系统模块多的时候,常见写法是:
UI -> Player
UI -> Enemy
Enemy -> Player
Player -> UI
问题:类之间强依赖,改了一个类,可能要改一堆。逻辑分散,难维护。新增交互成本极高。
3.中介者模式的核心思想
引入一个中介者,所有对象不再直接引用,只有中介者通信,中介者同一调度,转发逻辑
Player ─┐
Enemy ├──> Mediator <── UI
Weapon ─┘
4.中介者模式结构
角色说明
| 角色 | 说明 |
|---|---|
| Mediator | 中介者接口 |
| ConcreteMediator | 具体中介者 |
| Colleague | 同事类(被协调的对象) |
| ConcreteColleague | 具体同事类 |
5.实战示例
场景需求:玩家点击攻击按钮,敌人扣血,UI更新,玩家与敌人不直接引用
//中介者接口
public interface IMediator
{
void Notify(object sender, string eventType);
}
//具体中介者
public class BattleMediator : IMediator
{
public Player Player { get; set; }
public Enemy Enemy { get; set; }
public BattleUI UI { get; set; }
public void Notify(object sender, string eventType)
{
switch (eventType)
{
case "Attack":
Enemy.TakeDamage(Player.AttackPower);
UI.UpdateEnemyHp(Enemy.HP);
break;
case "EnemyDead":
UI.ShowWin();
break;
}
}
}
//同事类
public class Player
{
private IMediator mediator;
public int AttackPower = 10;
public Player(IMediator mediator)
{
this.mediator = mediator;
}
public void Attack()
{
mediator.Notify(this, "Attack");
}
}
//敌人类
public class Enemy
{
private IMediator mediator;
public int HP = 50;
public Enemy(IMediator mediator)
{
this.mediator = mediator;
}
public void TakeDamage(int damage)
{
HP -= damage;
if (HP <= 0)
{
mediator.Notify(this, "EnemyDead");
}
}
}
//同事UI类
public class BattleUI
{
private IMediator mediator;
public BattleUI(IMediator mediator)
{
this.mediator = mediator;
}
public void OnAttackButtonClick()
{
mediator.Notify(this, "Attack");
}
public void UpdateEnemyHp(int hp)
{
Debug.Log("Enemy HP: " + hp);
}
public void ShowWin()
{
Debug.Log("You Win!");
}
}
//使用:
public class GameEntry : MonoBehaviour
{
void Start()
{
BattleMediator mediator = new BattleMediator();
Player player = new Player(mediator);
Enemy enemy = new Enemy(mediator);
BattleUI ui = new BattleUI(mediator);
mediator.Player = player;
mediator.Enemy = enemy;
mediator.UI = ui;
// 模拟按钮点击
ui.OnAttackButtonClick();
}
}
6.优点与缺点
优点:解耦对象关系,集中管理交互逻辑,对象更纯粹,职责更单一。
缺点:容易变成上帝类,逻辑过多,需要拆分多个中介者,不适合极其简单的交互。
更多推荐

所有评论(0)