用于检索模型的 MVP 模式

MVP pattern for retriving model

我正在使用 MVP 模式开发 android 应用程序。

我想要不同的演示者,每个演示者都实现 getItems,调用关联模型的 getAll 静态方法。 我想使用泛型,结果是这样的:

public class BasePresenter<T> {
   protected T mModel;

   List getItems() {
       mModel.getAll();
   }
}

public class Presenter extends BasePresenter<Model> {
}

但我无法使用泛型访问 getAll 方法,因为它不是 Object 的方法。

因为对我来说,为所有演示者编写同样无聊的方法 getAll() 是愚蠢的,只改变模型,有什么办法可以实现吗?

我问是因为即使在 Google 的官方 MVP 指南中,它也总是使用相同的方法来检索数据,在每个演示者上覆盖它,我希望有更好的方法.

我想 "cast" 超类 mModel,但我不知道如何以及是否可以这样做。

也许这可以帮到你:

List getItems(){
    if(mModel instanceof TheSuperClassOrInterface){
        return ((TheSuperClassOrInterface)mModel).getAll();
    }else{
        return null;
    }
} 

试试这个

public class BasePresenter<M extends BaseModel<M>> {

    @Nullable
    private M mModel;

    @Nullable List<M> getItems() {
        if (mModel != null) {
            return mModel.getModelList();
        }
        return null;
    }
}

BaseModel 是

 public abstract class BaseModel<M> {

        private List<M> modelList;

        public List<M> getModelList() {
            return modelList;
        }

        public void setModelList(List<M> modelList) {
            this.modelList = modelList;
        }
    }

子模型

public class LoginModel extends BaseModel<LoginModel> {

    @Override
    public List<LoginModel> getModelList() {
        return super.getModelList();
    }

    @Override
    public void setModelList(List<LoginModel> modelList) {
        super.setModelList(modelList);
    }
}

最后主持人是这样的

public class LoginPresenter extends BasePresenter<LoginModel> {
        //do your code
}

希望对你有帮助。