第一种MVP:
MVP框架:
View层:BaseActivity
/**
*让子类去实例化Presenter层
*/
public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity implements View.OnClickListener {
public P mPresenter;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getContentViewID());//设置布局
initView();
initData();
initListener();
mPresenter = getmPresenterInstance();
mPresenter.bindView(this);//让Presenter绑定View
}
public abstract void initView();//初始化View
public abstract int getContentViewID();//获取布局
public abstract void initData();//初始化数据
public abstract void initListener();//初始化监听
public abstract P getmPresenterInstance();//让子类去绑定P层
//处理 响应错误信息
public abstract <ERROR extends Object> void responseError(Error error,Throwable throwable);
@Override
protected void onDestroy() {
super.onDestroy();
destroy();
}
public abstract void destroy();
}
Model层:BaseModel
/**
*通过构造方法绑定Presenter
*/
public class BaseModel<P extends BasePresenter> {
public P mPresenter;
public BaseModel(P mPresenter){
this.mPresenter = mPresenter;
}
}
Presenter层:BasePresenter
**
*Presenter层需要绑定View层和Model层
* 绑定View:调用BindView()方法 即通过调用方法来绑定View
* 绑定Model:构造方法中调用getModelInstance(),getModelInstance()由子类去实现 即让子类去实例化并绑定Model
*/
public abstract class BasePresenter<V extends BaseActivity,M extends BaseModel>{
public V mView ;//View层实例
public M mModel;//Model层实例
public BasePresenter(){
this.mModel = getModelInstance();
}
public void bindView(V mView){
//绑定View层
this.mView = mView;
}
public void unBindView(){
//解绑View
this.mView = null;
}
public abstract M getModelInstance();//让子类去实例化并绑定Model
}
契约接口:ILoginContract:模拟登陆操作
public interface ILoginContract {
//Model层:请求业务逻辑,Model层不需要回调函数,只需要请求服务器的函数
public interface M{
void requestLogin(String name,String pwd) throws Exception;
}
//View和Presenter层写在了一起,因为View和Presenter的方法一模一样,他们既需要请求验证的函数,又需要回调函数
public interface VP{
void requestLogin(String name,String pwd) throws Exception;
//回调函数
void responseLoginResult