Swift语言精要 - 浅谈代理模式(Delegate)
在iOS编程中,我们经常谈到代理代理,也就是delegate,那么什么是代理呢?
我们来看一下cocoa对它的描述:
Delegation is Cocoa’s term for passing off some responsibilities of an object to another
顾名思义:
代理是把职责从一个对象传到另一个对象。
其实,如果编写过Java或者C#程序的朋友应该知道,我们在设计的时候经常使用到接口和组合,道理是一样的。
看一下下面的代码:
首先,我们定义一个协议
protocol SaveMediaDelegate {
func save()
}
然后,我们把这个协议组合到我们的业务逻辑类中去
class MyComputer { var delegate : SaveMediaDelegate? func saveInfo() { // Check to see if the delegate is there, then call it delegate?.save() } }
接着,我们实现协议的不同表现形态
class SaveToDisk : SaveMediaDelegate { func save() { println("Saving to disk...") } } class SaveToUsb : SaveMediaDelegate { func save() { println("Saving to usb...") } }
然后,我们把我们的协议实现类注入到我们的业务类中去(DI - Dependency Injection)
let myComputer = MyComputer() myComputer.saveInfo() // does nothing let diskMedia = SaveToDisk() myComputer.delegate = diskMedia myComputer.saveInfo() // prints "Saving to disk..." let usbMedia = SaveToUsb() myComputer.delegate = usbMedia myComputer.saveInfo() // prints "Saving to usb..."
很简单吧,就是这么简单!
技术改变世界