MVP 的二次封装

MVP 模式好不好,有的人说好,因为大家都说好,有的人说不好,代码太多。其实还是好的,不好是因为姿势不对。

MVP 全称:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。

mvp 主要目的在于代码解耦和方便单元测试

下面将从代码方面解析如何封装一个简单的mvp

一、Presenter


public abstract class BasePresenter {
   protected Reference viewRef;

   public  void attachView(T view) {
       viewRef = new WeakReference(view);
   }

   public void detachView() {
       if (viewRef != null) {
           viewRef.clear();
           viewRef = null;
       }
   }
}





/**
* 创建人:北斗(byl)
* 功能描述:
*/
public  class LoginPresenter extends BasePresenter {
   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> 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() {

    }


}

你可能感兴趣的:(MVP 的二次封装)