Swift- 中介者(Mediator)模式

中介者模式(Mediator Pattern):定义一个中介对象来封装系列对象之间的交互。中介者使各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变他们之间的交互.

中介者模式.jpg

中介者模式显示生活中场景比较多,买房和卖房者通过中介进行房屋交易,中介持有买卖双方的信息,但是买卖双方不知道对方信息, 网络斗地主平台根据输赢结果对参与斗地主的人员账户进行信息进行更新.以斗地主为例:

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当前现金:\(colleagueA.cashMoney)---B当前的现金:\(colleagueB.cashMoney)")
        
        let mediator:LeaderMediator = LeaderMediator(a: colleagueA, b: colleagueB)
        colleagueA.mediator = mediator
        colleagueB.mediator = mediator
        
        colleagueA.winMoneyFromB(money: 20)
        
        print("A当前现金:\(colleagueA.cashMoney)---B当前的现金:\(colleagueB.cashMoney)")
        
        colleagueB.winMoneyFromA(money: 50)
        
        print("A当前现金:\(colleagueA.cashMoney)---B当前的现金:\(colleagueB.cashMoney)")
FlyElephant.png

中介者模式的优点:
1.降低了系统对象之间的耦合性,使得对象易于独立的被复用.
2.提高系统的灵活性,使得系统易于扩展和维护.

中介者模式的缺点:
中介者模式的缺点是显而易见的,因为这个“中介“承担了较多的责任,所以一旦这个中介对象出现了问题,那么整个系统就会受到重大的影响.

参考链接
http://blog.jobbole.com/78124/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 如果没有主板## 大家都知道,电脑里面各个配件之间的交互,主要是通过主板来完成的(事实上主...
    七寸知架构阅读 6,584评论 0 56
  • 设计模式基本原则 开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。开-闭原...
    西山薄凉阅读 9,341评论 3 14
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 9,386评论 1 15
  • 意图 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改...
    tomas家的小拨浪鼓阅读 4,819评论 0 0
  • Chapter.02桢潋 【梦里的眼睛】 小时候。 总是重复着同样的一个梦境。 阴沉甚至几乎是黑暗的天空,透明而且...
    亦黎阅读 2,394评论 4 1