就是我实现一个接口, 但是我不想去实现这个接口里的方法的时候就可以委托代理去完成。关键字: By
委托,也就是委托模式,它是23种经典设计模式种的一种,又名代理模式,在委托模式中,有2个对象参与同一个请求的处理,接受请求的对象将请求委托给另一个对象来处理。委托模式是一项技巧,其他的几种设计模式如:策略模式、状态模式和访问者模式都是委托模式的具体场景应用。
委托模式中,有三个角色,约束、委托对象和被委托对象。
约束: 约束是接口或者抽象类,它定义了通用的业务类型,也就是需要被代理的业务
被委托对象: 具体的业务逻辑执行者
委托对象: 负责对真是角色的应用,将约束累定义的业务委托给具体的委托对象。
interface IWashBow {
fun washing()
}
二 Son 实现接口并实现方法(儿子可以做)
object Son : IWashBow {
override fun washing() {
Log.i(">>>>>>>>", "washing: 儿子在洗碗 ")
}
fun playCar() {
Log.i(">>>>>>>>", "playCar: 儿子在玩小汽车 ")
}
}
三 Father 实现接口并实现方法(爸爸可以做)
class Father : IWashBow {
override fun washing() {
Log.i(">>>>>>>>", "washing: 爸爸在洗碗")
}
fun playMM() {
Log.i(">>>>>>>>", "playMM: 爸爸在跟妈妈玩 ")
}
}
4 测试(妈妈让爸爸做)
private fun initTest() {
val father = Father()
father.washing()
father.playMM()
}
运行结果:
I/>>>>>>>>: washing: 爸爸在洗碗
I/>>>>>>>>: playMM: 爸爸在跟妈妈玩
如果爸爸只想跟妈妈玩,不想去洗碗怎么办呢???
5 接口代理(爸爸委托儿子去做)
class Father : IWashBow by Son {
fun playMM() {
Log.i(">>>>>>>>", "playMM: 爸爸在跟妈妈玩 ")
}
}
运行结果:
I/>>>>>>>>: washing: 儿子在洗碗
I/>>>>>>>>: playMM: 爸爸在跟妈妈玩
总结:
这里的儿子就是代理人, 爸爸是委托人。在Father可以通过关键字 by ,把自己不想干的事委托给Son 。建议代理人用单例。
更多
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)