2017-05-27 3 views
0

私はKotlinの委譲パターンを利用して、いくつかのコンポーネントを組み合わせてより大きなコンポーネントに合わせます。これは私のコードをスピードアップし、読みやすく、モジュラーで、一貫性のあるものなどを作りました。しかし、私が苦労していることの1つは、代議員の割り当てを解除する良いパターンです。それらのほとんどは、私は、Androidのローダーをキャンセル、Rxサブスクリプションを退会タスクなど現在の実行を一時停止の世話をするために使用dispose()方法を持って、私がやっているもののように:代理パターンで呼び出す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() 
    } 
} 

手動ですべての委譲メソッドでdisposeの呼び出しクラスが特定のデリゲートメソッドを自動的に呼び出していることを確認するために、Kotlinには優雅なやり方があります(ポリモーフィズム、より多くのデリゲートなどによる) - この場合はクリーンアップメソッドですが、同じことがすべての代議員が行う必要のある操作。

答えて

0
+0

のHM kotlinのフォーマットではありませんhttps://github.com/android10/Android-CleanArchitecture特にベースユースケースに触発され

val disposables: CompositeDisposable fun addDisposable(val disposable: Disposable) disposables.add(disposable) end fun dispose if (!disposables.isDisposed()) { disposables.dispose(); } end 

この線に沿っていくつかのクラスを持つことができますCompositeDisposable

を使用することになりますスタックのオーバーフローに優れています。 – Calin

+0

ええ、以前はそのパターンをJavaで使っていましたが、静的型付けされたアーキテクチャを精巧に検討していないときは、その環境が素晴らしいです。しかし、私はKotlinの委任パターンhttps://kotlinlang.org/docs/reference/delegation.htmlを使用しようとしており、kaitlinプロパティ(怠惰なインスタンス化、観察可能なパターンなど)のように、素晴らしいdelegation-fooを行うことはできません。 )。これらのすべてが委任されたオブジェクトに介入することを可能にしますが、インタフェースの実装に委任するときは、このようなことはできません(少なくとも私は方法を見つけ出していません)。 – mikesol

関連する問題