"javascript设计模式之中介者模式学习笔记"
中介者模式是一种软件设计模式,它在对象间引入了一个中介对象,以协调这些对象间的交互,从而降低他们之间的耦合度。这种模式通常用于处理对象之间的复杂关系,尤其是当对象间的交互变得日益复杂时。
在JavaScript中,中介者模式的应用可以帮助我们构建更加灵活和可维护的代码结构。在描述的场景中,前端开发者通常需要与多个需求方沟通,如果每个需求方都直接与开发者交互,那么开发者就需要维护与每个需求方的联系,这会导致代码中对象之间的关系过于紧密。引入中介者,例如一个项目主管,作为协调者,需求方只需与主管沟通,开发者则只需要与主管交互,从而减少了对象间的直接通信,降低了系统的复杂性。
日常生活中的例子,如房屋中介,很好地展示了中介者模式的工作原理。租房者和房东不直接联系,而是通过中介进行交流,这样两者的关系就被中介者解耦了。
在代码实现上,我们可以创建一个中介者类,它负责接收和传递消息。以“英雄杀”游戏为例,原本两个玩家之间直接进行交互,但如果我们引入中介者,每个玩家不再是直接通知对方,而是通过中介者对象来传递赢、输或死亡的消息。代码可以重构如下:
```javascript
// 定义中介者类
function Mediator() {
this.hero1 = null;
this.hero2 = null;
}
Mediator.prototype.registerHero = function(hero, isEnemy) {
if (isEnemy) {
this.hero2 = hero;
} else {
this.hero1 = hero;
}
}
Mediator.prototype.notify = function(winner) {
winner.win();
if (winner === this.hero1) {
this.hero2.lose();
} else {
this.hero2.win();
}
}
// 定义英雄类
function Hero(name) {
this.name = name;
}
Hero.prototype.die = function(mediator) {
mediator.notify(this);
}
// 使用中介者
let hero1 = new Hero('Player1');
let hero2 = new Hero('Player2');
let mediator = new Mediator();
mediator.registerHero(hero1, false);
mediator.registerHero(hero2, true);
hero1.die(mediator); // 当hero1死亡时,通过中介者通知其他对象
```
在这个例子中,`Mediator`作为中介者,它注册了两个英雄,并在英雄死亡时负责通知其他对象。这样,英雄对象不再直接调用对方的方法,而是通过中介者来传递消息,实现了对象间的解耦。
中介者模式在JavaScript和其他编程语言中都有广泛的应用,它有助于减少代码的复杂性,提高模块的可复用性和可扩展性,尤其是在需要处理多对象交互的场景下。