一句话总结
用一个中介对象封装一系列对象交互。中介者使各对象不会显示的相互引用,从而使各对象耦合松散,而且可以独立的改变它们的交互。
中介者模式示例代码
static func main() {
let concreteMediator = ConcreteMediator()
let c1 = ConcreteColleague1(mediator: concreteMediator)
let c2 = ConcreteColleague2(mediator: concreteMediator)
concreteMediator.colleague1 = c1
concreteMediator.colleague2 = c2
c1.send(message: "你吃饭了么?")
c2.send(message: "没有,你打算请客?")
}
//抽象中介者
protocol Mediator {
func send(message: String, colleague: Colleague)
}
//抽象同事
protocol Colleague {
var mediator: Mediator { set get }
}
class ConcreteMediator: Mediator {
var colleague1: ConcreteColleague1?
var colleague2: ConcreteColleague2?
func send(message: String, colleague: Colleague) {
if colleague is ConcreteColleague1 {
colleague2?.notify(message: message)
} else {
colleague1?.notify(message: message)
}
}
}
class ConcreteColleague1: Colleague {
var mediator: Mediator
init(mediator: Mediator) {
self.mediator = mediator
}
func send(message: String) {
mediator.send(message: message, colleague: self)
}
func notify(message: String) {
print("同事1得到消息:\(message)")
}
}
class ConcreteColleague2: Colleague {
var mediator: Mediator
init(mediator: Mediator) {
self.mediator = mediator
}
func send(message: String) {
mediator.send(message: message, colleague: self)
}
func notify(message: String) {
print("同事2得到消息:\(message)")
}
}
中介者模式优点
- 中介者类的出现,减少了其它类与类之间的耦合
- 把各对象如何协作进行了抽象,从看待对象本身行为转移到关注对象的交互上,更宏观的角度去看待系统
中介者模式缺点
- 由于各对象的交互都放在中介者类中,当对象多时,中介者类中的代码也会越来越复杂