0

抽象クラスにリスナーメソッドがあります。

public void AsyncTaskListener(AbstractModel result){

とフックの束:

protected void RecieveModelAHook(ConcreteModelA){}
protected void RecieveModelBHook(ConcreteModelB){}
protected void RecieveModelCHook(ConcreteModelC){}

これで、AsyncTaskListenerが呼び出されたときに、呼び出すフックを決定する必要があります。現時点では、次のように解決しました。

public void AsyncTaskListener(AbstractModel result){}
    if(result instanceof ConcreteModelA){
         RecieveModelAHook((ConcreteModelA) result);
    }
    if(result instanceof ConcreteModelB){
         RecieveModelBHook((ConcreteModelB) result);
    }
}

より良い解決策はありますか?それともそのようなもののパターンですか?

AsyncTaskはさまざまなJSON文字列を読み取り、そこからConcreteModelA、ConcreteModelBなどのモデルを作成します。すべてのクライアントが異なる結果を処理できるはずなので、フックが必要です。

AsyncTaskには、リクエストタイプがあります。リクエストタイプ1はConcreteModelAを作成しますリクエストタイプ2はConcreteModelBを作成します

今のところは機能しますが、醜いキャスティングには満足していません。

4

1 に答える 1

0

Sounds like you have use for the strategy pattern. Rather then having such a switch in your code that requires updating whenever you have a new case, try to make use of polymorphism by encapsulating the part that changes and moving it out of the class by usage of composition.

于 2013-02-10T23:08:59.637 に答える