虽然有用过mvc都是一直没有好好分析,解读。下面意思意思…
MVC(Model-View-Control Model:模型 View:视图 Control:控制器)
设计模式表明,应用的任何对象,归根结底都属于模型对象、视图对象以及控制对象中的一种。
M(Model:模型)
模型对象存储着应用的数据和业务逻辑。模型对象通常用来映射与应用相关的一些事物,如用户、商店里的商品、服务器上的图片或者一段电视节目。
模型对象不关心用户界面,它存在的唯一目的就是存储和管理应用数据。
Android应用里的模型类通常就是我们创建的定制类。应用的全部模型对象组成了模型层。
V(View:视图)
视图对象知道如何在屏幕上绘制自己以及如何响应用户的输入,如用户的触摸等。一个简单的经验法则是,凡是能够在屏幕上看见的对象,就是视图对象。
Android默认自带了很多可配置的视图类。当然,也可以定制开发自己的视图类。应用的全部视图对象组成了视图层。
C(Control:控制器)
控制对象含有应用的逻辑单元,是视图与模型对象的联系纽带。控制对象响应视图对象触发的各类事件,此外还管理着模型对象与视图间的数据流动。
在Android里,控制器通常是Activity、fragment或Service的一个子类。
其实在Android应用开发中,就是基于最基础的MVC架构进行设计。
模型对象存储着应用的数据和业务逻辑,为存储和管理应用数据。
控制器是视图对象和模型对象的联系纽带,管理着模型对象和视图对象的数据流动,控制着诸如触发事件之类的响应事件。
视图对象就是用户感受到的界面逻辑。
还有一个简单的例子就是Listview,listview的数据为(Model),BaseAdapter和Activity为(Control),listview的子布局为(View)
创建模型
Student.java
public class Student {
private String rollNo;
private String name;
public String getRollNo() {
return rollNo;
}
public void setRollNo(String rollNo) {
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
创建视图
StudentView.java
public class StudentView {
public void printStudentDetails(String studentName, String studentRollNo){
System.out.println("Student: ");
System.out.println("Name: " + studentName);
System.out.println("Roll No: " + studentRollNo);
}
}
创建控制器
StudentController.java
public class StudentController {
private Student model;
private StudentView view;
public StudentController(Student model, StudentView view){
this.model = model;
this.view = view;
}
public void setStudentName(String name){
model.setName(name);
}
public String getStudentName(){
return model.getName();
}
public void setStudentRollNo(String rollNo){
model.setRollNo(rollNo);
}
public String getStudentRollNo(){
return model.getRollNo();
}
public void updateView(){
view.printStudentDetails(model.getName(), model.getRollNo());
}
}
使用 StudentController 方法来演示 MVC 设计模式的用法。
MVCPatternDemo.java
public class MVCPatternDemo {
public static void main(String[] args) {
//从数据可获取学生记录
Student model = retriveStudentFromDatabase();
//创建一个视图:把学生详细信息输出到控制台
StudentView view = new StudentView();
StudentController controller = new StudentController(model, view);
controller.updateView();
//更新模型数据
controller.setStudentName("John");
controller.updateView();
}
private static Student retriveStudentFromDatabase(){
Student student = new Student();
student.setName("Robert");
student.setRollNo("10");
return student;
}
}
验证输出
Student:
Name: Robert
Roll No: 10
Student:
Name: John
Roll No: 10
总结:
优点:分层,结构清晰,耦合性低,大型项目代码的复用性得到极大的提高,开发人员分工明确,提高了开发的效率,维护方便,降低了维护成本。
缺点:简单的小型项目,使用MVC设计反而会降低开发效率,层和层虽然相互分离,但是之间关联性太强,没有做到独立的重用。