Android MVP模式之(一)初識
阿新 • • 發佈:2019-02-03
MVP淺談
說到MVP模式,在這裡不得不提到MVC模式,我們來看看兩者的區別
**MVC**
M:基本bean(java bean)
V:View以及子類
C:Activity、Fragment以及子類
**MVP**
M:資料層(資料庫、檔案、網路等等...)
V:UI層(View、Activity、Fragment以及它們子類)
P:中介(MVP設計目的:為了將UI層和資料層進行解耦和),通過P層進行關聯
在開發中其實對於兩者的區別深有體會,例如使用MVC模式,在開發進行一般的時候,突然新加了幾個人手要加快進度,這個時候,我們會發現其實對於現有的功能已經不好去讓新來的接收,模組耦合度太高,但是對於MVP來說,資料和view的分塊,使得這樣對於開發者來說是很好去維護的;
model
//這裡主要做資料和邏輯上的處理
public class LoginModel {
public String login(String username, String password) {
if (username.equals("123")&&password.equals("123")){
return "登入成功";
}
return "登入失敗";
};
}
view
//這裡主要是view、介面上的通知,將model操作完成後的結果通知給介面
public interface LoginView {
void toastResult(String result);
}
presenter
//presenter的作用就是講model和view分離,使得模組高內聚、低耦合
public class LoginPresenter {
private LoginView loginView;
private LoginModel loginModel;
public LoginPresenter(LoginView loginView) {
this.loginView = loginView;
this .loginModel = new LoginModel();
}
public void login(String username, String Password){
String result = loginModel.login(username, Password);
loginView.toastResult(result);
}
}
主介面
public class MainActivity extends AppCompatActivity implements View.OnClickListener, LoginView {
private LoginPresenter presenter;
private EditText et_username;
private EditText et_password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_username = (EditText) findViewById(R.id.et_username);
et_password = (EditText) findViewById(R.id.et_password);
Button bt_login = (Button) findViewById(R.id.bt_login);
bt_login.setOnClickListener(this);
presenter = new LoginPresenter(this);
//獲取presenter來操作model和view模組
}
@Override
public void onClick(View view) {
String username = et_username.getText().toString().trim();
String passwrod = et_password.getText().toString().trim();
presenter.login(username,passwrod);
//呼叫這裡的方法,然後在login中呼叫model的登入判斷
}
@Override
public void toastResult(String result) {
//登入成功後,通過呼叫view回撥登入結果
Toast.makeText(this,result,Toast.LENGTH_SHORT).show();
}
}