3.5 中介者模式(mediator)
- 是用来降低多个对象和类之间的通信复杂性。
- 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
- MVC 框架,其中 C(控制器)就是 M(模型)和 V(视图)的中介者。
// 塔台 请求位置
function TrafficTower() {
this.airplanes = []
}
TrafficTower.prototype.requestPositions = function () {
return this.airplanes.map(function (airplane) {
return airplane.position
})
}
// 飞机 位置 塔台
function Airplane(position, trafficTower) {
this.position = position
this.trafficTower = trafficTower
this.trafficTower.airplanes.push(this)
}
Airplane.prototype.requestPositions = function () {
return this.trafficTower.requestPositions()
}
module.exports = [TrafficTower, Airplane]
const expect = require('chai').expect
const [TrafficTower, Airplane] = require('../src/behavioral/mediator/mediator')
describe('中介者模式 测试', () => {
it('塔台', () => {
var trafficTower = new TrafficTower()
var boeing1 = new Airplane(10, trafficTower)
var boeing2 = new Airplane(15, trafficTower)
var boeing3 = new Airplane(55, trafficTower)
expect(boeing1.requestPositions()).to.deep.equals([10, 15, 55])
})
})
es6 实现
class TrafficTower {
constructor() {
this.airplanes = []
}
requestPositions() {
return this.airplanes.map(airplane => {
return airplane.position
})
}
}
class Airplane {
constructor(position, trafficTower) {
this.position = position
this.trafficTower = trafficTower
this.trafficTower.airplanes.push(this)
}
requestPositions() {
return this.trafficTower.requestPositions()
}
}
export { TrafficTower, Airplane }
const expect = require('chai').expect
import { TrafficTower, Airplane } from '../src/behavioral/mediator/mediator_es6'
describe('中介者模式 es6测试', () => {
it('塔台', () => {
const trafficTower = new TrafficTower()
const boeing1 = new Airplane(10, trafficTower)
const boeing2 = new Airplane(15, trafficTower)
const boeing3 = new Airplane(55, trafficTower)
expect(boeing1.requestPositions()).to.deep.equals([10, 15, 55])
})
})