Android Kotlin学习(八)- 代理模式

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值