MVP模式

  • MVP的全稱是Model、View、Presenter,顧名思義,它將整個應用分爲三層
  • View層:視圖層,包含和界面相關的功能,例如各類Activity、Fragment、View、Adapter等,該層專一於用戶的交互,實現設計師給出的界面、動畫等交互效果。View層通常會持有Presenter層的引用,或者也能夠經過依賴注入的方式得到Presenter實例,並將非UI的邏輯操做委託給Presenter
  • Presenter層:邏輯控制層,充當中間人的角色,用來隔離VIew和Model,該層是經過從View層剝離控制邏輯部分而造成的,主要負責View層和Model層的控制和交互。例如接收VIew層的網絡數據加載請求,並分發給對應的Model處理,同時監聽Model層的處理結果,最終反饋給View層,從而實現界面的刷新
  • Model層:封裝各類數據來源,例如遠程網絡數據,本地數據庫數據等,對Presenter層提供簡單易用的接口
  • 代碼以下:
    • UserInfoActivity(View層)
      public class UserInfoActivity extends Activity implements IUserInfoShow, View.OnClickListener {
      
          private final String TAG = UserInfoActivity.class.getCanonicalName();
          private UserInfoPresenter mUserInfoPresenter;
      
          @Override
          public void beforeLoading() {
              Log.e(TAG,"開始加載以前");
          }
      
          @Override
          public void afterLoading() {
              Log.i(TAG,"加載數據以後");
          }
      
      
          @Override
          public void getUserInfoSucc(UserInfo userInfo) {
              Log.i(TAG,"獲取UserInfo 成功"+userInfo.toString());
          }
      
          @Override
          public void getUserInfoFail(String msg) {
              Log.e(TAG,"獲取UserInfo Fail"+msg);
          }
      
      
          @Override
          protected void onCreate(@Nullable Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_userinfo);
              initEvent();
              initData();
          }
      
          private void initEvent() {
              findViewById(R.id.btn).setOnClickListener(this);
          }
      
          private void initData() {
              mUserInfoPresenter = new UserInfoPresenter(new GetUserInfoImpl(),this);
          }
      
          @Override
          public void onClick(View v) {
              if (mUserInfoPresenter != null){
                  mUserInfoPresenter.getUserInfo(888);
              }
      
      
      
      
          }
      }
      

    • Presenter層:java

      • 業務邏輯:
        public interface IUserInfo {
             void getUserInfo(int id,OnUserInfoListener userInfoListener);
        }
        

         

      • 業務邏輯實現類
        public class GetUserInfoImpl implements IUserInfo {
        
            @Override
            public void getUserInfo(final int id, final OnUserInfoListener userInfoListener) {
                new Thread(){
                    @Override
                    public void run() {
                        super.run();
                        try {
                            Thread.sleep(2*1000);
                            if (id == 888){
                                UserInfo userInfo = new UserInfo();
                                userInfo.setAccount("JIM");
                                userInfo.setId(id);
                                userInfo.setPwd("lee");
                                userInfoListener.onGetSucc(userInfo);
                            }else{
                                String msg = "查無此人";
                                userInfoListener.onGetFail(msg);
                            }
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
        
                    }
                }.start();
            }
        }
        
      • public interface OnUserInfoListener {
            void onGetSucc(UserInfo userInfo);
            void onGetFail(String msg);
        }
        
      • UserInfoPresenter:
        public class UserInfoPresenter {
            private IUserInfo getuserinfo;
            private IUserInfoShow userInfoShow;
        
            public UserInfoPresenter(IUserInfo getuserinfo, IUserInfoShow userInfoShow) {
                this.getuserinfo = getuserinfo;
                this.userInfoShow = userInfoShow;
            }
        
            public void getUserInfo(int id){
                userInfoShow.beforeLoading();
                if (getuserinfo!=null){
                    getuserinfo.getUserInfo(id, new OnUserInfoListener() {
                        @Override
                        public void onGetSucc(UserInfo userInfo) {
                            userInfoShow.getUserInfoSucc(userInfo);
                            userInfoShow.afterLoading();
                        }
        
                        @Override
                        public void onGetFail(String msg) {
                            userInfoShow.getUserInfoFail(msg);
                            userInfoShow.afterLoading();
                        }
                    });
                }
            }
        }
        
      • 和VIew交互的接口
        public interface IUserInfoShow {
            void beforeLoading();
            void afterLoading();
            void getUserInfoSucc(UserInfo userInfo);
            void getUserInfoFail(String msg);
        }

 

    • Model層:
      ublic class UserInfo {
          private int Id;
          private String Account;
          private String pwd;
      
          public int getId() {
              return Id;
          }
      
          public void setId(int id) {
              Id = id;
          }
      
          public String getAccount() {
              return Account;
          }
      
          public void setAccount(String account) {
              Account = account;
          }
      
          public String getPwd() {
              return pwd;
          }
      
          public void setPwd(String pwd) {
              this.pwd = pwd;
          }
      
          @Override
          public String toString() {
              return "UserInfo{" +
                      "Id=" + Id +
                      ", Account='" + Account + '\'' +
                      ", pwd='" + pwd + '\'' +
                      '}';
          }
      }    
相關文章
相關標籤/搜索