目录
中介者模式
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。
应用实例:
1、中国加入 WTO 之前是各个国家相互贸易,结构复杂,现在是各个国家通过 WTO 来互相贸易。
2、机场调度系统。
3、MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者。
代码实现
一、举例
假如小明要开心的洗澡,洗澡时要关闭窗帘、打开音乐,打开淋浴。如果不采用调停模式。可能会这么做:
1、方式一:打开淋浴时,让淋浴通知音乐播放器播放音乐,音乐播放器打开时通知窗帘关闭
2、方式二:打开音乐播放器,让播放器通知窗帘关闭,让窗帘通知淋浴打开
3、方式三:窗帘关闭,窗帘通知音乐播放器播放音乐,音乐播放器通知淋浴打开
4、….
这就要求,播放器、淋浴、窗帘互相拥有,耦合度很高。也不利于扩展新的设备。采用调停模式就可以很好的解决这个问题
二、代码实现
MusicPlayer.swift
class MusicPlayer: NSObject {
func playMusic() {
print("play a music ...")
}
func stopMusic() {
print("stop a music")
}
}
Curtain.swift
class Curtain: NSObject {
func openCurtain() {
print("openCurtain")
}
func closCurtain() {
print("closCurtain")
}
}
Shower.swift
class Shower: NSObject {
func startShower() {
print("startShower")
}
func stopShowe() {
print("stopShowe")
}
}
Mediator.swift
class Mediator: NSObject {
private let musicPlayer : MusicPlayer = MusicPlayer()
private let curtain : Curtain = Curtain()
private let shower : Shower = Shower()
func happyBath() {
musicPlayer.playMusic()
curtain.closCurtain()
shower.startShower()
}
}
调用
func test1() {
Mediator().happyBath()
}
/**
play a music ...
closCurtain
startShower
*/
总结
是不是感觉跟门面模式很像,其实本质是一样的。对外部就叫门面模式,对内部就要调停模式
行者常至,为者常成!