二十六、MVC模式
MVC模式,Model–View–Controller,用于应用程序的分层设计。
简介
MVC模式是面向对象的Java开发中常用的一种设计模式,将应用程序分层设计,从而使得程序模块可以分工协作。Model层负责数据和部分逻辑的实现、View层主要用于视图显示数据和界面交互、而Controller 则通过控制数据和视图,链接程序的数据和视图层次。
实现
创建一个model的实体类,一个用于显示数据的view类,以及一个用于控制数据和视图的controller类。
- 创建model类
Student.java
/**
* Created by thinkpad on 16-12-11.
* 学生类,在此作为模型类。
*/
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;
}
}
- 创建view视图类
StudnetView.java
/**
* Created by thinkpad on 16-12-11.
* view视图类,用于显示model的数据。
*/
public class StudentView {
public void printStudentDetails(String name,String studentRollNo){
System.out.printf("Student: name=%s,RollNo=%s \n",name,studentRollNo);
}
}
- 创建Controller类
StudentController.java
/**
* Created by thinkpad on 16-12-11.
* 控制器类,用于控制数据和视图显示
*/
public class StudentController {
private Student model;
private StudentView view;
//获得数据,构造函数
public StudentController(Student model,StudentView view){
this.model = model;
this.view = view;
}
//更新视图
public void updateView(){
view.printStudentDetails(model.getName(),model.getRollNo());
}
public String getStudentName() {
return model.getName();
}
public void setStudentName(String name) {
model.setName(name);
}
public String getStudentRollNo() {
return model.getRollNo();
}
public void setStudentRollNo(String rollNo) {
model.setRollNo(rollNo);
}
}
演示
MVCPatternDemo.java
/**
* Created by thinkpad on 16-12-11.
* 演示MVC模式的用法
*/
public class MVCPatternDemo {
public static void main(String[] args){
//从数据获取学生记录
Student model = retriveStudentFromDatabase();
//创建视图view,显示输出学生信息。
StudentView view = new StudentView();
StudentController controller = new StudentController(model,view);
controller.updateView();
//更新数据,从而通过controller来更新view
controller.setStudentName("Robert");
controller.updateView();
}
private static Student retriveStudentFromDatabase() {
Student student = new Student();
student.setName("Tom");
student.setRollNo("7");
return student;
}
}
- 输出
Student: name=Tom,RollNo=7
Student: name=Robert,RollNo=7