美文网首页Mvpandroid
MVP 的二次封装

MVP 的二次封装

作者: 大笨龙___ | 来源:发表于2018-04-25 09:35 被阅读277次

    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() {
    
        }
    
    
    }
    

    相关文章

      网友评论

      本文标题:MVP 的二次封装

      本文链接:https://www.haomeiwen.com/subject/ngrelftx.html