JHHK

欢迎来到我的个人网站
行者常至 为者常成

7、Mediator

目录

中介者模式

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。

应用实例:

1、中国加入 WTO 之前是各个国家相互贸易,结构复杂,现在是各个国家通过 WTO 来互相贸易。
2、机场调度系统。
3、MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者。

代码实现

一、举例

假如小明要开心的洗澡,洗澡时要关闭窗帘、打开音乐,打开淋浴。如果不采用调停模式。可能会这么做:

1、方式一:打开淋浴时,让淋浴通知音乐播放器播放音乐,音乐播放器打开时通知窗帘关闭
2、方式二:打开音乐播放器,让播放器通知窗帘关闭,让窗帘通知淋浴打开
3、方式三:窗帘关闭,窗帘通知音乐播放器播放音乐,音乐播放器通知淋浴打开
4、….

这就要求,播放器、淋浴、窗帘互相拥有,耦合度很高。也不利于扩展新的设备。采用调停模式就可以很好的解决这个问题

img

二、代码实现

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
*/

总结

是不是感觉跟门面模式很像,其实本质是一样的。对外部就叫门面模式,对内部就要调停模式


行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.