一. 前言
1. 介绍
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种框架模式。
- Model:模型层,负责处理数据的加载或存储。
- View:视图层,负责界面数据的展示,与用户进行交互。
- Controller:控制器层,负责逻辑业务的处理。
2. 作用
将业务逻辑、数据、界面分离的一种代码组织方式,修改界面时无需去修改业务逻辑。
3. 流程

- View接受用户的请求,然后将请求传递给Controller。
- Controller进行业务逻辑处理后,通知Model去更新。
- Model数据更新后,通知View去更新界面显示。
二. MVC实例
Android中一般布局的XML文件就是View层,Activity
则充当了Controller的角色。
根据我们的需要编写模型类。
1. Model层
创建一个数据模型,能够保存一个数字,并有一个更新的方法,数据更新完后会通知UI去更改显示的内容。
1 2 3 4 5 6 7 8 9
| public class NumModel { private int num = 0;
public void add(ControllerActivity controllerActivity){ num++; controllerActivity.updateUI(num+""); }
}
|
2. View层
View层在Android中对应的就是布局的XML文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ControllerActivity" android:orientation="vertical" android:gravity="center">
<TextView android:id="@+id/tv_show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:layout_marginBottom="10dp" />
<Button android:id="@+id/btn_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击+1" />
</LinearLayout>
|
3. Controller层
Android中一般由Activity
来充当Controller。Controller一方面接收来自View的事件,一方面通知Model处理数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public class ControllerActivity extends AppCompatActivity {
private TextView textView; private Button button; private NumModel numModel;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
textView = findViewById(R.id.tv_show); button = findViewById(R.id.btn_add);
numModel = new NumModel();
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { numModel.add(ControllerActivity.this); } }); }
public void updateUI(String s) { textView.setText(s); } }
|
4. 运行结果

5. 源码
MVCTest
三. Android中的源码应用
Android中最典型的MVC莫过于ListView
了,要显示的数据为Model,而要显示的ListView
就是View了,Adapter
则充当着Controller的角色。当Model发生改变的时候可以通过调用Adapter
的notifyDataSetChanged
方法来通知组件数据发生变化,这时Adapter会调用getView
方法重新显示内容。具体代码这里就不分析了。
四. MVC的优缺点
1. 优点
- 视图层(View)与模型层(Model)解偶,通过Controller来进行联系。
- 模块职责划分明确。主要划分层M,V,C三个模块,利于代码的维护。
2. 缺点
参考文章
Android框架模式——MVC