Android Kotlin学习(八)- 代理模式
代理模式就是一个对象的实现委托给另一个代理对象来实现供外部调用,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访,比如老板想知道员工的信息,一个一个去问员工那太累了,然后老板就通过HR去询问,我们看下怎么用过Kotlin实现代理
Subject
定义共用接口方法,可以是一个接口或抽象类,然后添加需要查询的方法
interface InfoSubject {
fun getSalary():Int
fun getEdu():String
fun isMarr():Boolean
}
WorkerSubject
代理模式中实际委托对象或被代理对象,外部调用者通过代理对象间接调用实际的委托对象中定义的方法
class WorkerSubject(id:Int):InfoSubject {
var id = id
val TAG = "WorkerSubject"
override fun getSalary(): Int {
Log.i(TAG,"${id} getSalary")
return 2500
}
override fun getEdu(): String {
Log.i(TAG,"${id} getEdu")
return "加里敦大学"
}
override fun isMarr(): Boolean {
Log.i(TAG,"${id} isMarr")
return true
}
}
Proxy
持有一个真实 WorkerSubject引用,在代理类中接口方法中调用 WorkerSubject方法以此来达到代理作用,by 关键字表示 workerSubject将会在 HRProxy中内部存储,并且编译器将自动生成委托给 workerSubject的所有 InfoSubject 接口方法
class HRProxy(workerSubject: WorkerSubject) : InfoSubject by workerSubject{
val workerSubject = workerSubject;
// 如果需要修改返回值或者添加逻辑,就重写方法
override fun getSalary(): Int {
return workerSubject.getSalary()+5000
}
}
打印:
4565-4565/com.kotlin.demo I/TestActivity: 加里敦大学
4565-4565/com.kotlin.demo I/TestActivity: 7500
4565-4565/com.kotlin.demo I/TestActivity: true