设计模式-(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()
}
}
浙公网安备 33010602011771号