Kotlin-委托剖析(1)- 接口委托

简单列子
interface Listener {//1
    fun onSuccess()
    fun onFailed()
}
class A() : Listener{//2
    override fun onSuccess() {
    }

    override fun onFailed() {
    }
}

class B() : Listener{//3
    override fun onSuccess() {
    }

    override fun onFailed() {
    }
}
  • 定义Listener接口,A、B都实现Listener接口。如果A、B onSuccess\onFailed处理是一致的,那么代码是否就冗余了?这时候就可以用到委托了。
class ListenerImpl : Listener {//1
    override fun onFailed() {
        //do something
    }

    override fun onSuccess() {
        //do something
    }
}

//定义
class A(listener: Listener) : Listener by listener//2
class B(listener: Listener) : Listener by listener//3

//调用
A(ListenerImpl())
B(ListenerImpl())
  • 注释1:定义公共的实现;
  • 注释2、3:类A的Listener接口委托传入的listener对象处理,类B也是;
反编译看看原理
public final class A implements Listener {
   // $FF: synthetic field
   private final Listener $$delegate_0;

   public A(@NotNull Listener listener) {
      Intrinsics.checkNotNullParameter(listener, "listener");
      super();
      this.$$delegate_0 = listener;
   }

   public void onFailed() {
      this.$$delegate_0.onFailed();//1
   }

   public void onSuccess() {
      this.$$delegate_0.onSuccess();//2
   }
}
  • 好像也没什么值得分析的,哈哈哈。调用的都是委托对象的接口。
总结

接口委托,将接口的逻辑交给委托来处理,很适合运用在接口实现一致的,或者用组合的方式来构建能力的场景。

以上分析有不对的地方,请指出,互相学习,谢谢哦!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简单例子 以下是属性委托的代码, 属性b委托给了属性a,a、b两者数据同步。Tips:可空属性好像不能成为委托对象...
    杨0612阅读 3,244评论 0 1
  • 本文要点概述 辨析委托模式与代理模式 接口委托(Delegated interface) 属性委托(Delegat...
    JayDroid阅读 3,590评论 0 1
  • 前言 项目地址https://github.com/laibinzhi/KotlinDelegation[http...
    CallMeMrZ阅读 3,146评论 0 0
  • 类委托 类委托:一个类中定义的方法实际是调用另一个类的对象的方法来实现。DelegatedPattern.kt 问...
    Shmily鱼阅读 4,739评论 0 0
  • 前序 委托,对于很多Java开发者来说都会一面蒙蔽,我也不例外。委托,维基百科的解释是:有两个对象参与处理同一个请...
    大棋17阅读 9,196评论 0 5

友情链接更多精彩内容