【设计模式】MVC 模式

news2024/11/24 7:09:27

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

  • Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
  • View(视图) - 视图代表模型包含的数据的可视化。
  • Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。

实现

我们将创建一个作为模型的 Student 对象。StudentView 是一个把学生详细信息输出到控制台的视图类,StudentController 是负责存储数据到 Student 对象中的控制器类,并相应地更新视图 StudentView

MVCPatternDemo,我们的演示类使用 StudentController 来演示 MVC 模式的用法。

MVC 模式的 UML 图

步骤 1

创建模型。

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;
   }
}

步骤 2

创建视图。

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);
   }
}

步骤 3

创建控制器。

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());
   }  
}

步骤 4

使用 StudentController 方法来演示 MVC 设计模式的用法。

MVCPatternDemo.java

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;
   }
}

步骤 5

执行程序,输出结果:

Student: 
Name: Robert
Roll No: 10
Student: 
Name: John
Roll No: 10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/871287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【爬虫】爬取旅行评论和评分

以马蜂窝“普达措国家公园”为例,其评论高达3000多条,但这3000多条并非是完全向用户展示的,向用户展示的只有5页,数了一下每页15条评论,也就是75条评论,有点太少了吧! 因此想了个办法尽可能多爬…

Linux 终端命令之文件浏览(2) more

Linux 文件浏览命令 cat, more, less, head, tail,此五个文件浏览类的命令皆为外部命令。 hannHannYang:~$ which cat /usr/bin/cat hannHannYang:~$ which more /usr/bin/more hannHannYang:~$ which less /usr/bin/less hannHannYang:~$ which head /usr/bin/he…

最新智能AI系统+ChatGPT源码搭建部署详细教程+知识库+附程序源码

近期有网友问宝塔如何搭建部署AI创作ChatGPT,小编这里写一个详细图文教程吧。 使用Nestjs和Vue3框架技术,持续集成AI能力到AIGC系统! 增加手机端签到功能、优化后台总计绘画数量逻辑!新增 MJ 官方图片重新生成指令功能同步官方 …

nginx负载均衡配置过程

一、环境说明 主机名IPnginx服务器nginx-server192.168.198.141web页面1web1192.168.198.100web页面2web2192.168.198.200 关闭所有主机的防火墙和Selinux服务 二、配置过程 自定义页面 自定义web1和web2的页面 主配置文件 查看nginx的主配置文件 vim /usr/local/nginx/c…

全球八分之一的河流受到缺氧影响

一项全球研究发现,世界各地河流中的溶解氧含量低得危险。缺氧的真实发生率可能更高。 小型、低梯度的城市河流,例如图中北卡罗来纳州的那条河流,是最容易缺氧的河流之一。图片来源:乔安娜布拉扎克 2023 年 3 月,《卫报…

LeetCode--HOT100题(29)

目录 题目描述:19. 删除链表的倒数第 N 个结点(中等)题目接口解题思路代码 PS: 题目描述:19. 删除链表的倒数第 N 个结点(中等) 给你一个链表,删除链表的倒数第 n 个结点,并且返回链…

Microsoft365家庭版1年订阅新功能及版本对比

Microsoft 365可帮助您工作、学习、组织、连接和创,只需一项方便的订阅,即可尽享具有 Microsft 365 的6款精品应用、可同时登录5 台设备(包括 Windows、macOS、iOS 和 Android 设备)、高级安全性等,并且可以自由管理授…

升级STM32电机PID速度闭环编程:从F1到F4的移植技巧与实例解析

引言: 在嵌入式系统开发中,STM32系列微控制器广泛应用于各种应用领域。而对于直流有刷电机的控制,PID速度闭环是一种常用的控制方式。本文将以此为例,探讨如何从STM32F1系列移植到STM32F4系列,并详细介绍HAL库在不同型…

渗透测试验证码爆破实操

一、准备工具 captcha-killer-modified 下载路径 https://github.com/f0ng/captcha-killer-modified https://github.com/f0ng/captcha-killer-modified/releases/download/0.21-beta/captcha-killer-modified-0.21-beta-jdk11.jar 二、安装工具 burp安装captcha-killer-modif…

登录验证码实现

Hutool代码改造 Hutool 有参考文档&#xff1b;很多工具类&#xff1b;把一些功能都封装好&#xff1b;都不用你自己去写&#xff1b;直接调用它的工具类 它这里会详细告诉你引入方式Hutool <dependency><groupId>cn.hutool</groupId><artifactId>hu…

【第二阶段】kotlin语言的内联-inline关键字

1.函数如果没有使用lambda作为参数&#xff0c;就不需要声明成内联 2.函数如果使用lambda作为参数&#xff0c;就需要声明成内联&#xff0c;如果不使用内联&#xff0c;在调用端会生成多个对象来完成lambda的调用&#xff0c;会造成性能的损耗 3.函数如果使用lambda作为参数&a…

模板Plus【完整版】

文章目录 1.非类型模板参数的引入2.标准库和普通数组3.模板的特化3.1介绍3.2代码讲解3.3画图讲解 4.类、函数模板特化初识5.全特化与偏特化6.模板不能分离编译1.typename的使用2.预处理相关知识3.为什么不能分离编译&#xff1f;4.怎么解决&#xff1f;5.代码详解1.vector.h2.v…

实战篇之基于二进制思想的用户标签系统(Mysql+SpringBoot)

一&#xff1a; 计算机中的二进制 计算机以二进制表示数据&#xff0c;以表示电路中的正反。在二进制下&#xff0c;一个位只有 0 和 1 。逢二进一 位。类似十进制下&#xff0c;一个位只有 0~9 。逢十进一位。 二&#xff1a; 进制常用运算 &#xff08;位运算&#xff09;…

QT之时钟

QT之时钟 会用到一个时间类:qtime 定时类:qtimer #------------------------------------------------- # # Project created by QtCreator 2023-08-13T10:49:31 # #-------------------------------------------------QT += core guigreaterThan(QT_MAJOR_VERSION,…

基于Yolov8与LabelImg训练自己数据的完整流程

基于Yolov8与LabelImg训练自己数据的完整流程 1. 创建虚拟环境2. 通过git 安装 ultralytics3. 安装完成之后&#xff0c;通过以下代码测试下环境配置是否正确4. 安装labelImg标注软件5. 使用labelImg进行标注&#xff0c;图片使用上面的coco1285.1 点击“打开目录”选择存储图像…

如何看待40岁还在做程序员?

1&#xff0c;40岁还在做程序员是好还是坏&#xff1f; 2&#xff0c;40岁从零开始学习软件开发&#xff0c;四年后我成了首席研发 40岁了还在做程序员&#xff0c;是一个好还是坏的选择&#xff0c;这是一个很复杂的问题&#xff0c;因为每个人的情况都是不同的。在这里提供一…

38 | 浦发银行股票分析案例

本文将通过一个浦发银行股票分析案例,探讨如何从多个维度对股票进行分析,包括基本面、技术面和市场环境等因素。我们将深入挖掘浦发银行的财务数据、业务模式以及市场定位,以了解其内在价值和潜在风险。同时,我们还将考察技术面的指标,如价格走势、均线形态等,以揭示市场…

centos7使用yum安装gcc8

1 概述 cenots7自带的gcc版本为4.8.5&#xff0c;不方便编译一些软件&#xff0c;需要将gcc升级。升级gcc可以通过源码编译安装&#xff0c;也可以通过yum等软件管理工具来进行安装&#xff0c;本文介绍通过yum软件来安装gcc。 2 安装过程 2.1 安装scl源 yum install -y c…

解开谜团:为什么红黑树胜过AVL树?

为什么红黑树胜过AVL树 博主简介一、引言1.1、红黑树和AVL树简介1.2、红黑树在某些方面优于AVL树 二、红黑树和AVL树的基本原理2.1、红黑树的定义和性质2.2、AVL树的定义和性质2.3、对比两种树结构的特点 三、插入和删除操作的复杂性比较3.1、红黑树的插入操作和平衡性维护3.2、…