基于ModelClass的调用钩子。更好的解决方案再铸造

时间:2013-02-10 18:15:50

标签: java android design-patterns casting listener

我在抽象类中有一个监听器方法:

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

它现在有效,但我对丑陋的演员不满意。

1 个答案:

答案 0 :(得分:0)

听起来你已经使用了strategy pattern。而不是在你的代码中有这样的转换需要在有新案例时进行更新,尝试通过封装更改的部分并通过使用合成将其移出类,来利用多态性。