概要
用一个中介对象来封装一系列对象交互。中介者使各对象不需要相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
类图
运行
代码
console.log('中介在模式演示:');
var indexId = 0;
//抽象层--------------------
class Mediator {
send(byid,toid, message) {
}
}
class Concrete {
receive(byid, message) {
}
send(toid, message) {
}
}
//实现层----------
class ConcreteMediator extends Mediator {
constructor() {
super();
this.tanks = new Array();
}
send(byid,toid, message) {
this.tanks[toid].receive(byid, message);
}
register(tank) {
this.tanks.push(tank);
tank.controlerCenter = this;
}
}
class Tank extends Concrete {
constructor() {
super();
this.id = indexId++;
this.controlerCenter = null;
}
receive(byid, message) {
console.log("my:" + this.id + " 收到" + byid + "的消息:" + message);
}
send(toid, message) {
console.log("my:" + this.id + "发给" + toid + "消息:" + message);
this.controlerCenter.send(this.id, toid, message);
}
}
// 客户端
class Client {
main() {
// 坦克控制中心
var controlerCenter = new ConcreteMediator();
var tank1 = new Tank();
var tank2 = new Tank();
var tank3 = new Tank();
controlerCenter.register(tank1);
controlerCenter.register(tank2);
controlerCenter.register(tank3);
tank1.send(2, "你好");
}
}
var client = new Client();
client.main();
实例分析
用一个中介对象来封装一系列对象交互。中介者使各对象不需要相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
这里解耦的就是坦克的send,只有设置一个toid和message就行,不需要和任何其他的坦克发生耦合。
耦合这东西,只要有业务关联,是不可能觉对消除的,只能是降低耦合,这里就是把彼此的直接耦合变成间接耦合。
英语
mediator
n. 调停者; 传递者; 中介物
concrete
adj. 混凝土的; 实在的,具体的; 有形的; vi. 凝结; vt. 使凝固; 用混凝土修筑;
colleague
n. 同事,同僚