设计模式-(9)中介者模式(swift)

在对象去耦合的模式中,有两种模式:中介者模式,观察者模式

 

一,概念

  用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

  这个模式我们可以简单的类比于星型结构,中介者就是中心,其他对象的交互都是通过中心的中介者作为媒介,而不是直接交互,这样就避免了对象直接交互导致的关系混乱,不易维护的缺点。

 

二,类图

  

  Mediator为抽象的中介者,它定义了与抽象Colleague交互的一般行为,ConcreteMediator为ConcreteColleague定义了更加具体的行为,通过子类化中介者(Mediator),把各种Colleague交互行为应用到相同或者不同的colleague类型。Colleague的实例有一个中介者(Mediator)实例的引用,同时中介者的实例知道参与这个组织的每个对象。每一个ConcreteColleague只知道自己的交互行为,不知道其他的ConcreteColleague的行为,但是它们都知道ConcreteMediator对象。如果应用中只需要一个中介者,有时可以省去抽象的Mediator。

 

三,代码演示

Mediator

protocol MediatorProtocol {
    func showImage(data: Data)
    func memberNum(data: Data)
    func storageData(data: Data)
    func arithmetic(data: Data)
}

 ConcreteMediator

class MainBoard: MediatorProtocol {
    
    var cpu: ColleagueProtocol?
    var memory: ColleagueProtocol?
    var disk: ColleagueProtocol?
    var graphics: ColleagueProtocol?
    
    func showImage(data: Data) {
        graphics?.operation(data: Data())
    }
    
    func memberNum(data: Data) {
        memory?.operation(data: Data())
    }
    
    func storageData(data: Data) {
        disk?.operation(data: Data())
    }
    
    func arithmetic(data: Data) {
        cpu?.operation(data: Data())
    }
    
    
}

 Colleague

protocol ColleagueProtocol {
    
    var mediator: MediatorProtocol{get}
    init(mediator: MediatorProtocol)
    
    func operation(data: Data)
    
}

 ColleagueConcrete

class CPU: ColleagueProtocol {
    var mediator: MediatorProtocol
    
    required init(mediator: MediatorProtocol) {
        self.mediator = mediator
    }
    
    func operation(data: Data) {
        print("cpu operation data \(data)")
    }
    
    func showImage() {
        mediator.showImage(data: Data())
    }

}

 

class Memory: ColleagueProtocol {
    var mediator: MediatorProtocol
    
    required init(mediator: MediatorProtocol) {
        self.mediator = mediator
    }
    
    func operation(data: Data) {
        print("Memory member data \(data)")
    }
    
    func storageData() {
        mediator.storageData(data: Data())
    }
    

}

 

class Disk: ColleagueProtocol {
    var mediator: MediatorProtocol
    
    required init(mediator: MediatorProtocol) {
        self.mediator = mediator
    }
    
    func operation(data: Data) {
        print("Disk storage data \(data)")
    }
    

}

 

class Graphics: ColleagueProtocol {
    var mediator: MediatorProtocol
    
    required init(mediator: MediatorProtocol) {
        self.mediator = mediator
    }
    
    func operation(data: Data) {
        print("Graphics show data \(data)")
    }
    
    
}

 Client

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let mainboard = MainBoard()
        let cpu = CPU(mediator: mainboard)
        mainboard.cpu = cpu
        let memeory = Memory(mediator: mainboard)
        mainboard.memory = memeory
        mainboard.disk = Disk(mediator: mainboard)
        mainboard.graphics = Graphics(mediator: mainboard)
        
        cpu.showImage()
        memeory.storageData()
    }
}

 

posted on 2018-03-31 12:18  洋子哥哥  阅读(189)  评论(0编辑  收藏  举报