Proxy 代理模式
A class Proxy
and a class Service
both conform to the same protocol ServiceInterface
, and Proxy
want to give some of its method to done by Service
, so Proxy
just keep a reference of Service
and call the Service
when Proxy
it want to solve some problem.
一个名为 “代理” 的类和一个名为 “服务” 的类都遵守同一个名为 “服务接口” 的协议, 然后代理想要把它的一些方法交给服务去做,进而代理只是持有服务的一个引用,然后在需要解决问题的时候,调用代理来解决。
// Service Interface
protocol Work {
func manageStuff()
func dispatchSalary()
}
// Proxy
class Boss: Work {
var manager: Manager?
init(manager: Manager) {
}
func manageStuff() {
manager?.manageStuff()
}
func dispatchSalary() {
manager?.dispatchSalary()
}
}
// Service
class Manager: Work {
func manageStuff() {
}
func dispatchSalary() {
}
}
let manager = Manager()
let boss = Boss(manager: manager)
boss.dispatchSalary() // In fact, it's the manager whom dispatch the salary.
代码中,boss 是代理,manager 是服务提供者,都遵守 Work 协议。需要 boss 来分发工资的时候,实际他调用的是 manager 来执行具体的动作。