2017-05-27 16 views
0

我正在使用Kotlin委托模式将多个组件组合成更大的组件。这加快了我的代码,使它更易于阅读,更模块化,更一致等。所有好东西。然而,我正在努力的一件事是释放我的代表的一个好的模式。他们大多有一个dispose()的方法,我用它来采取退订Rx订阅,取消Android的装载机,暂停任务等。目前执行的照顾,我做的东西,如:Kotlin自动代码调用委托模式

interface Disposable { 
    fun dispose() 
} 

interface A: Disposable { 
} 

interface B: Disposable { 
} 

class AImpl: A { 
    fun dispose(){} 
} 

class BImpl: B { 
    fun dispose(){} 
} 

class Foo(val a = AImpl(), val b = BImpl(): A by AImpl, B by BImpl { 
    override fun dispose() { 
    a.dispose() 
    b.dispose() 
    } 
} 

手动调用处理上的所有委托方法感觉有点笨重 - 在Kotlin中有没有一种优雅的方式(通过多态性,更多的委托等​​)来确保类自动调用委托的某些方法 - 在这种情况下,它是清理方法,但同样适用于任何所有代表都需要做的操作。

回答

0

一个有用的模式将被使用CompositeDisposable

所以,你可以沿此线

val disposables: CompositeDisposable 

fun addDisposable(val disposable: Disposable) disposables.add(disposable) end 

fun dispose if (!disposables.isDisposed()) { 
     disposables.dispose(); } end 

这是由https://github.com/android10/Android-CleanArchitecture特别是基本用例启发一些类https://github.com/android10/Android-CleanArchitecture/blob/master/domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/UseCase.java

+0

嗯科特林格式不很好的堆栈溢出。 – Calin

+0

是的,我之前在Java中使用过这种模式,当您不打算详细描述静态类型的体系结构时,它在那种环境中很棒。但是我正在尝试使用Kotlin的代理模式https://kotlinlang.org/docs/reference/delegation.html,并且不可能像kaitlin属性(懒惰实例化,可观察模式等)那样进行花哨的委派 - foo。 )。所有这些东西都允许你干涉委托对象,但是当你委托给接口的实现时,你不能做任何这些东西(至少我没有发现如何!) – mikesol