MVC设计模式
1.定义
MVC设计模式,全名为Model-View-Controller,是一种软件设计典范,用于将业务逻辑、数据和界面显示分离,以提高代码的可维护性、可扩展性和灵活性。MVC模式将软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
2.组成部分
- 模型(Model):
- 职责:模型是应用程序中的数据部分,表示应用程序的状态和行为。
- 特点:模型通常包括一个或多个类,封装了数据和数据操作,提供公共接口与控制器交互。模型独立于视图和控制器,不知道数据的呈现方式或用户交互方式。
- 视图(View):
- 职责:视图是用户界面的一部分,表示数据的可视化呈现。
- 特点:视图通常包括一个或多个类,用于绘制图形界面、显示数据和处理用户输入。视图只关注数据的呈现,不关注数据的来源或处理过程。
- 控制器(Controller):
- 职责:控制器处理用户输入,调用相应的模型和视图操作。
- 特点:控制器通常包括一个或多个类,协调用户界面和数据操作之间的交互。控制器从视图中获取用户输入,调用模型操作并更新视图。
MVC处理过程:
3.特点
优点:
- 多视图共享一个模型,大大提高代码的可重用性
- MVC三个模块相互独立,松耦合架构
- 控制器提高了应用程序的灵活性和可配置性
- 有利于软件工程化管理
完美的系统架构 = 松耦合 + 高重用性 + 高扩展性
缺点:
- 原理复杂
- 增加了系统结构和实现的复杂性
- 视图对模型数据的低效率访问
4.实现
(jsp+servlet+javabean)
创建模型:
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;
}
}
创建视图:
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);
}
}
创建控制器:
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 方法:
public class MVCPatternDemo {
public static void main(String[] args) {
//从数据库获取学生记录
Student model = retrieveStudentFromDatabase();
//创建一个视图:把学生详细信息输出到控制台
StudentView view = new StudentView();
StudentController controller = new StudentController(model, view);
controller.updateView();
//更新模型数据
controller.setStudentName("John");
controller.updateView();
}
private static Student retrieveStudentFromDatabase(){
Student student = new Student();
student.setName("Robert");
student.setRollNo("10");
return student;
}
}