2013-02-10 61 views
0

我有一個抽象類的監聽方法:基於ModelClass的調用掛鉤。解決方案然後鑄造

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

它現在可行,但我不滿意醜陋的鑄造。

回答

0

聽起來像你有使用strategy pattern。而不是在你的代碼中有這樣一個開關,每當你有一個新的案例時需要更新,試着通過封裝更改的部分並通過使用合成將它移出課程來利用多態性。