1. 程式人生 > >Android MVP模式之(一)初識

Android MVP模式之(一)初識

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