前言:其實在Android studio創(chuàng)建一個項目的模式也是一個簡化的mvc模式,不過activity中有太多太多的代碼,因為activity中包含了model層和controller層,下面詳細(xì)解析一下MVC模式,并用一個小例子帶大家去理解。

MVC模式介紹:
MVC是Model-View-Controller的簡稱
Model:模型層,負(fù)責(zé)處理數(shù)據(jù)的加載或者存儲
View:視圖層,負(fù)責(zé)界面數(shù)據(jù)的展示,與用戶進行交互
Controller:控制器層,負(fù)責(zé)邏輯業(yè)務(wù)的處理
MVC模式的特點:
1.耦合性低;
2.可擴展性好;
3.模塊職責(zé)劃分明確
MVC模式的不足:
XML文件作為視圖層,所做的事情比較有限,所以Activity作為Controller同時也承擔(dān)了一部分的View視圖顯示工作,導(dǎo)致Activity代碼龐大,維護困難
接下來就看一個非常簡單的小例子:
1.項目架構(gòu)

2.首先定義一個person的bean,這個都見多了,沒什么好說的
public class Person {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3.定義一個回調(diào)接口 OnPersonListener,對應(yīng)的一個成功方法和失敗方法
public interface OnPersonListener {
void onSuccess(Person person);
void onFailure();
}
4.定義一個接口 PersonModle
public interface PersonModle {
void Login(Person person,OnPersonListener onPersonListener);
}
4.定義一個實現(xiàn)類 PersonModelImpl,實現(xiàn)PersonModle接口,在方法中添加邏輯
public class PersonModelImpl implements PersonModle {
//在此處寫相應(yīng)邏輯
@Override
public void Login(Person person, OnPersonListener onPersonListener) {
if(person.getUsername().equals("123")&&person.getPassword().equals("123")){
onPersonListener.onSuccess(person);
}else {
onPersonListener.onFailure();
}
}
}
5.再來看看activity中的代碼
public class MainActivity extends AppCompatActivity implements OnPersonListener,View.OnClickListener {
private EditText et_username;
private EditText et_password;
private Button btn_login;
private String username;
private String password;
private PersonModelImpl personModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
personModel = new PersonModelImpl();
}
//控件初始化
private void init() {
et_username = (EditText)findViewById(R.id.et_username);
et_password = (EditText)findViewById(R.id.et_password);
btn_login = (Button)findViewById(R.id.btn_login);
btn_login.setOnClickListener(this);
}
@Override
public void onClick(View v) {
username = et_username.getText().toString();
password = et_password.getText().toString();
Person person = new Person();
person.setUsername(username);
person.setPassword(password);
personModel.Login(person,this);
}
@Override
public void onSuccess(Person person) {
Toast.makeText(this, "登錄成功", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure() {
Toast.makeText(this, "登錄失敗", Toast.LENGTH_SHORT).show();
}
}
可以看到雖然邏輯非常簡單,但是哪一塊需要做什么事情是非常清晰的。但其實modle層和view層耦合性還是比較大的,在IOS中的MVC模式則不存在這個問題。所以其實Android最適合的模式是MVP模式,但是也要看具體項目吧,個人認(rèn)為MVP模式容易類爆炸,在網(wǎng)上有很多比MVC優(yōu)秀但比MVP簡單的模式,如果是個人擼的話就要快速開發(fā)嘛,可以去找找。