中介者模式(Mediator Pattern):定義一個中介對象來封裝系列對象之間的交互饱搏。中介者使各個對象不需要顯示地相互引用钟病,從而使其耦合性松散,而且可以獨立地改變他們之間的交互.
中介者模式.jpg
中介者模式顯示生活中場景比較多,買房和賣房者通過中介進行房屋交易兼呵,中介持有買賣雙方的信息畸写,但是買賣雙方不知道對方信息驮瞧, 網(wǎng)絡(luò)斗地主平臺根據(jù)輸贏結(jié)果對參與斗地主的人員賬戶進行信息進行更新.以斗地主為例:
class Colleague {
var mediator:LeaderMediator?
var cashMoney:Float = 0
}
class ColleagueA:Colleague {
func winMoneyFromB(money:Float) {
self.mediator?.changeMoney(action: "ColleagueA", money: money)
}
}
class ColleagueB:Colleague {
func winMoneyFromA(money:Float) {
self.mediator?.changeMoney(action: "ColleagueB", money: money)
}
}
class Mediator {
var colleagueA:ColleagueA?
var colleagueB:ColleagueB?
convenience init(a:ColleagueA?,b:ColleagueB?) {
self.init()
colleagueA = a
colleagueB = b
}
func changeMoney(action:String,money:Float) {}
}
class LeaderMediator:Mediator {
override func changeMoney(action: String, money: Float) {
if action == "ColleagueA" {
self.colleagueA?.cashMoney += money
self.colleagueB?.cashMoney -= money
} else if action == "ColleagueB" {
self.colleagueA?.cashMoney -= money
self.colleagueB?.cashMoney += money
}
}
}
let colleagueA:ColleagueA = ColleagueA()
let colleagueB:ColleagueB = ColleagueB()
colleagueA.cashMoney = 100
colleagueB.cashMoney = 100
print("A當(dāng)前現(xiàn)金:\(colleagueA.cashMoney)---B當(dāng)前的現(xiàn)金:\(colleagueB.cashMoney)")
let mediator:LeaderMediator = LeaderMediator(a: colleagueA, b: colleagueB)
colleagueA.mediator = mediator
colleagueB.mediator = mediator
colleagueA.winMoneyFromB(money: 20)
print("A當(dāng)前現(xiàn)金:\(colleagueA.cashMoney)---B當(dāng)前的現(xiàn)金:\(colleagueB.cashMoney)")
colleagueB.winMoneyFromA(money: 50)
print("A當(dāng)前現(xiàn)金:\(colleagueA.cashMoney)---B當(dāng)前的現(xiàn)金:\(colleagueB.cashMoney)")
FlyElephant.png
中介者模式的優(yōu)點:
1.降低了系統(tǒng)對象之間的耦合性,使得對象易于獨立的被復(fù)用.
2.提高系統(tǒng)的靈活性枯芬,使得系統(tǒng)易于擴展和維護.
中介者模式的缺點:
中介者模式的缺點是顯而易見的论笔,因為這個“中介“承擔(dān)了較多的責(zé)任,所以一旦這個中介對象出現(xiàn)了問題千所,那么整個系統(tǒng)就會受到重大的影響.