中介者模式(behavioral 5)

234 阅读1分钟

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])
	})
})