MVP 模式好不好,有的人说好,因为大家都说好,有的人说不好,代码太多。其实还是好的,不好是因为姿势不对。
MVP 全称:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。
mvp 主要目的在于代码解耦和方便单元测试
下面将从代码方面解析如何封装一个简单的mvp
一、Presenter
public abstract class BasePresenter<T> {
protected Reference<T> viewRef;
public void attachView(T view) {
viewRef = new WeakReference<T>(view);
}
public void detachView() {
if (viewRef != null) {
viewRef.clear();
viewRef = null;
}
}
}
/**
* 创建人:北斗(byl)
* 功能描述:
*/
public class LoginPresenter extends BasePresenter<LoginView> {
private LoginView loginview;
private LoginModle loginModle;
public LoginPresenter(LoginView loginView){
this.loginview=loginView;
loginModle=new LoginModle();
}
public void doLogin() {
loginModle.login( new OnLoginListener() {
@Override
public void loginSucess() {
loginview.loginSuccess();
}
@Override
public void loginFaild(int code, String msg) {
loginview.loginFaild(msg);
}
});
}
public void doClear(){}
}
二、View层
public interface BaseView {
void showToast(String message);
void showLoading();
void hideLoading();
}
public interface LoginView extends BaseView {
public void loginSuccess();
public void loginFaild(String err);
}
三、modle 层
public class LoginModle {
private String check="";
private String pwd="";
public void login(final OnLoginListener listener){
}
}
四、使用
public abstract class BaseUIActivity<V extends BaseView, T extends BasePresenter<V>> extends SimpleActivity implements BaseView {
public T presenter;
@Override
public void aheadWindown() {
initPresenter();
initSpeak();
initWakeUp();
}
public abstract int getLayout();
public abstract void findView();
public abstract void setValue();
protected abstract T createPresenter();
public void initPresenter() {
presenter = createPresenter();
if (presenter != null) {
presenter.attachView((V) this);
}
}
@Override
public void showToast(String message) {
}
@Override
public void showLoading() {
}
@Override
public void hideLoading() {
}
}