Unity设计模式—中介者模式
中介者模式:用一个中介对象封装一系列的对象交互,中介者使对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
我见
传统的中介者模式写法个人用的很少,写起来很麻烦,如下图:
而且由于具体中介者类包含了大量同级对象的交互细节,可能会变得很复杂,最终难以维护。
但是中介者模式的思想非常有用,有好多种非常常用的应用场景,每种场景都值得专门写一篇blog。
所以,这一篇blog会重点介绍几种中介者模式的变种(应用),而非实现上图所示的中介者模式。
以下几种使用了中介者模式的方法都非常常用
- 中介者模式和观察者模式结合的发布/订阅系统
- 服务定位器模式(TODO:专题介绍)
- MVP/MVVM模式里的Presenter/ViewModel也是中介者(TODO:专题介绍)
中介者模式和观察者模式结合的发布/订阅系统
需求
试想一个需求:在游戏里有NPC对象和HireView招聘录用界面。
点击招聘录用界面的“录用”按钮,主场景的人播放庆祝动作。
常规做法如下:
1.要么由界面通知npc做出更新,即view依赖npc:
public class HireView(){
public void OnHireButtonClick(string id){
//处理这个界面的逻辑
this.UpdateView();
//通过某种手段获取npc对象
NPC npc = Global_Get_NPC(id);
npc.Happy();
}
}
2.要么由npc监听view的按钮点击事件,即npc依赖view
hireView