MVC模式简介
MVC是软件工程中的一种软件架构模式,它把软件系统分为三个基本的部分。
分别为:
- 模型Model
- 视图View
- 控制器Controller
主要为以上三大部分组成,如下图所示:
MVC模式优缺点
1.MVC模式优点
1)多个视图共享一个模型,大大提高代码的可重用性;
2)三个模块相互独立,改变其中一个不会影响其他两,所以依据这种设计模式,能构建良好的松耦合性的组件;
3)控制器提高了应用程序的灵活性和可控制性:控制器可以用来连接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提高强有力的手段。
2.MVC模式缺点
1)增加了系统结构和实现的复杂性
对于简单页面,严格遵循mvc,会增加结构的复杂性。
2)视图与控制器过于紧密的连接
视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的。
3)视图对模型数据的低效率访问
依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据,对未变化数据的不必要的频繁访问,也将损害操作性能。
MVC模式模型
1.模型(Model)
模型封装了数据及对数据的操作,可以直接对数据库进行访问。
简要的讲:就是一个或多个javabean对象,用于存储数据和业务逻辑。
2.视图(View)
视图负责展示,没有具体的程序逻辑,比如:一个JSP页面想控制器提交数据和为模型提供数据显示,JSP页面主要使用HTML标记和JavaBean标记来显示数据。
3.控制器(Controller)
控制器用于控制程序的流程,将模型中的数据展示到视图中。
比如:Servlet对象根据视图提交的请求进行控制,即将请求转发给业务逻辑的javabean,并将处理记过存放到实体模型javabean中,输出给视图显示。
MVC模式示例
1.创建模型
public class Student { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
2.创建视图
public class StudentView { public void printStudentDetails(String studentName,){ System.out.println("Student: "); System.out.println("Name: " + studentName); } }
3.创建控制器
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 updateView(){ view.printStudentDetails(model.getName()); } }
4.MVC模型演示
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("mikechen"); controller.updateView(); } private static Student retrieveStudentFromDatabase(){ Student student = new Student(); student.setName("mikechen"); return student; } }
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》