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
   }
}
  • 好像也没什么值得分析的,哈哈哈。调用的都是委托对象的接口。
总结

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

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

你可能感兴趣的:(Kotlin-委托剖析(1)- 接口委托)