MVP模式

1. 基本概念和代碼

參考:web

http://www.jianshu.com/p/50c7124f408e數據庫

http://www.jianshu.com/p/7c4e310da409編程

http://blog.csdn.net/qq_31852701/article/details/52946127ide

 

MVP模式的代碼的,寫好了去看,沒什麼難度,可是若是本身去寫,就感受很不適應,主要仍是編程思想要有一些轉變 ,仍是須要本身寫一下測試

 

1.1 基本概念

Model,View,Presenter三者之間的關係是:View和Model之間沒有聯繫,View經過接口向Presenter來傳遞用戶操做,Model不主動和Presenter聯繫,被動的等着Presenter來調用其接口,Presenter經過接口和View/Model來聯繫。ui

 

View <- 接口 <- Presenter ->接口 -> Modelthis

View -> 接口 -> Presenter <- 接口 <- Modelspa

 

1.2 僞代碼

參考連接:http://www.jianshu.com/p/50c7124f408e.net

VIEW:翻譯

interface IUserView {

  void setPresenter(presenter);
  void showUsers(users);
  void showDeleteUserComplete();
  void showDeleteUserError();

}

class UserView implements IUserView {

  UserPresenter presenter;

  // 保持對Presenter的引用,用於路由用戶操做
  void setPresenter(presenter) {
      this.presenter = presenter;
  }

  // 將Presenter傳遞來的數據展現出來
  void showUsers(users) {
      draw(users);
  }

  // Model操做數據成功後,經過Presenter來告之View須要更新用戶界面
  void showDeleteUserComplete() {
      alert("Delete User Complete");
  }

  // Model操做數據失敗後,也是經過Presenter來告之View須要更新用戶界面
  void showDeleteUserError() {
      alert("Delete User Fail");
  }

  // 當用戶點擊某個按鈕時,將用戶操做路由給presenter,由presenter去處理
  void onDeleteButtonClicked(event) {
      presenter.deleteUser(event);
  }

}

Model:

interface IUserModel {

  List<User> getUsers();
  boolean deleteUserById();

}

class UserModel implements IUserModel {

  // 在數據庫裏查找數據,並將數據返回給presenter
  List<User> getUsers() {
       return getUsersInDatabase(id);
  }

  // 在數據庫裏刪除數據,並將結果返回給presenter
  User deleteUserById(id) {
      return deleteUserByIdInDatabase(id);
  }

}

Presenter

interface IUserUserPresenter {

  void deleteUser(event);

}

class UserUserPresenter implements IUserPresenter {

  // 保持對View的引用
 IUserView view;
  // 保持對Model的引用
 IUserModel model;

  UserUserPresenter(IUserView view, IUserModel model) {
    this.view = view;    
    this.model = model;

    this.view.setPresenter(this);   
  }

  void start() {
    // 從Model中取出數據
    List<User> users = model.getUsers();
    // 將數據發送給View,讓其展現到用戶界面
    view.showUsers(users);
  }

  void deleteUser(event) {
    // View將用戶操做路由過來,由Presenter來處理
    long uid = whichUserNeedToDeleteBy(event);
    // 將用戶操做翻譯成命令或消息傳遞給model,以改變數據
    boolean success = model.deleteUserById(uid);
    // 將Model操做數據後的結果通知View來改變用戶界面
    if (success) {
          view.onDeleteUserSuccess();
    } else {
        view.onDeleteUserFail();  
    }
  }
}

 

1.3 簡單的代碼 

 

MODE

package s.com.mvp;

public interface IBaseModel{
    String getData();
}


public class BaseModel implements IBaseModel{
    String textData = "這是測試數據";
    @Override
    public String getData() {
        return textData;
    }
}

 

VIEW

package s.com.mvp;

public interface IBaseView {
    //初始化Presenter
    void initPresenter(BasePresenter presenter);
    //顯示數據
    void showMsg(String s);

    void showTest();
}

public class MainActivity extends AppCompatActivity implements IBaseView{
    private String TAG = "MainActivity";
    BasePresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initPresenter(new BasePresenter(this));
        presenter.start();
    }

    @Override
    public void initPresenter(BasePresenter presenter) {
        this.presenter = presenter;
    }

    @Override
    public void showMsg(String s) {
        Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void showTest() {
        Toast.makeText(MainActivity.this, "成功!!!!!", Toast.LENGTH_SHORT).show();
    }
}

 

Presenter:

package s.com.mvp;

public interface IBasePresenter {
    //NONE
}

public class BasePresenter implements IBasePresenter{
    private String TAG = "BasePresenter";
    IBaseModel mModel;
    IBaseView mView;

    public BasePresenter(IBaseView mView){
        this.mView = mView;
        mModel = new BaseModel();
        this.mView.showTest();
    }

    public void start(){
        String s = mModel.getData();

        mView.showMsg(s);
    }
}

 

實現MVP的三個接口
IBuyBookModel
IBuyBookPresenter
IBuyBookView

實現MVP的兩個抽象類(也就是具備共性,不須要修改的抽象類)
BaseActivity
BasePresenter

上面的接口和抽象類的具體實現類
BuyBookActivity
BuyBookModel
BuyBookPresenter

 

 

 

 

 

2. 在webcan中的分析

 

參考資料:http://blog.csdn.net/qq_31852701/article/details/52946127

相關文章
相關標籤/搜索