27-Java MVC 模式

Java空对象模式

    • 实现
    • 范例

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

实现

在这里插入图片描述

  • 定义一个作为模型的Student对象;
  • StudentView是一个把学生详细信息输出到控制台的视图类;
  • StudentController是负责存储数据到Student对象中的控制器类,并相应地更新视图StudentView;
  • 最后类MVCPatternDemo使用StudentController来演示MVC模式的用法;

范例

1. 定义模型

Student.java

package com.demo.gof;
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

package com.demo.gof;
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

package com.demo.gof;
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

package com.demo.gof;
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;}
}

编译运行以上 Java 范例,输出结果如下

$ javac -d . src/main/com.demo/gof/MVCPatternDemo.java
$ java  com.demo.gof.MVCPatternDemo
Student: 
Name: Robert
Roll No: 10
Student: 
Name: John
Roll No: 10

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

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

相关文章

渔业安全生产综合管理指挥系统-航迹数据优化方案

文章目录 引言I 轨迹数据模型II 轨迹信息索引III 数据同步方案3.1 多服务器多表同步3.2 增量数据同步3.3 执行IV 配置ESV 团队建设5.1 前端(web GIS)5.2 后端(Java)see also引言 背景: 目前系统查询轨迹数据比较慢的原因是没有进行读写分离,轨迹数据的查询和写入都是SQL…

Linux查看mysql安装目录

在Linux系统中,MySQL的安装目录通常位于/usr/local/mysql或/opt/mysql目录下。这些目录是MySQL在Linux系统中默认的安装目录,用户可以在这些目录下找到MySQL的所有文件和配置信息。 要查看MySQL的安装目录,可以使用以下命令: wh…

踏上机器学习的征程:探索基础概念与学习模式

摘要: 机器学习是当今科技领域最具前沿和应用价值的技术之一,它正在改变我们对数据的理解和利用方式。本文将引导读者深入了解机器学习的基本概念,包括监督学习、无监督学习和半监督学习等,并通过生动的例子解释这些概念,帮助读者迈出学习机器学习的第一步。 导言: 随着…

Ubuntu 如何安装 Beyond Compare?

Ubuntu20.04安装Beyond Compare 4.3.7 一、官网下载方式一:方法二:使用 .deb 包安装 二、安装相关依赖和bcompare三、破解常见错误解决方法 ) 文件比较工具Beyond Compare是一套由Scooter Software推出的文件比较工具。主要用途是对比两个文件夹或者文件…

AST解web控制流平坦化

此代码可以解决大部分 while if else 控制流平坦化原理: 先将 if 语句转为 switch 语句,再将 switch 分支合并,最后删除已合并的分支(具体看代码) 实现效果图 首先安装依赖: npm install babel/parser npm…

指针基础 - golang版

文章目录 1、指针2、基础语法2.1 定义指针2.2 取地址操作符 &2.3 解引用操作符 * 3、实战用法3.1 指针作为函数参数3.2 指针和结构体3.3 指针和接收者 1、指针 变量是存储值的地方;指针的值是一个变量的地址;不是所有的值都有地址,但是所…

【K8s】如何使用Kubernetes Ingress: Contour

使用Kubernetes Ingress: Contour 目录 使用Kubernetes Ingress: Contour没有 Ingress 控制器的情况Ingress 控制器的优势部署 Contour看到 Contour 在运行中总结推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战在处理Kubernetes时会遇到…

Java后端八股-------并发编程

图中的 synchronized方法如果没有锁,那么可能会有超卖,数据错误等情况。 加锁之后会按顺序售卖。 synchronized的底层是monitor。 线程没有竞争关系的时候,引入了轻量级锁,当需要处理竞争关系的时候一定要用到重量级锁(线程的…

数据挖掘与大数据的结合

随着大数据技术的不断发展和普及,数据挖掘在大数据环境下的应用也变得更加广泛和深入。以下将探讨大数据技术对数据挖掘的影响,以及如何利用大数据技术处理海量数据并进行有效的数据挖掘,同时分析大数据环境下的数据挖掘挑战和解决方案。 1.…

【Flutter】IOS运行工程二次启动崩溃问题。

问题 IOS14设备,切后台划掉,二次启动崩溃,看crash日志 一直提示第三方plugin注册问题。 一个一个尝试注掉,发现依然不行,创建了一个原生app,运行复现发现没问题,大概率是flutter的问题。 结论…

【RK32388 Android10, UNIK 4G模块导致usb hub出现 EMI】

文章目录 【RK32388 Android10, UNIK 4G模块导致usb hub出现 EMI 】背景调试过程解决相机掉线id变号发现EMI 出现 【RK32388 Android10, UNIK 4G模块导致usb hub出现 EMI 】 背景 在Android10 unik 的版本提测中,发现了一个问题&#xff0c…

Golang高效流控实践

流控对于构建高可靠弹性系统至关重要,本文介绍了Golang内置的流控组件,通过该组件就可以打造适合各种业务场景的流控系统。原文: Rate Limiting in Go: Controlling Traffic with Efficiency[1] Jon Cellier Unsplash 导言 流控(Rate limiting)是构建可扩…

Javaweb day17 day18 day19

mysql-DDL 数据库操作 写法 客户端工具 (也可以使用idea) 表 写法 约束 数据类型 案例 写法 表的查询修改删除 写法 删除

RTC的Google拥塞控制算法 rmcat-gcc-02

摘要 本文档描述了使用时的两种拥塞控制方法万维网(RTCWEB)上的实时通信;一种算法是基于延迟策略,一种算法是基于丢包策略。 1.简介 拥塞控制是所有共享网络的应用程序的要求互联网资源 [RFC2914]。 实时媒体的拥塞控制对于许…

Lua中文语言编程源码-第四节,更改linit.c初始化库函数, 使Lua加载中文库关键词(与所有的基础库相关)

源码已经更新在CSDN的码库里: git clone https://gitcode.com/funsion/CLua.git 在src文件夹下的linit.c初始化库的函数,用于lua.c和其他客户端。 增加加载中文库宏名列表,保留英文库宏名列表。 原始的代码为: static const …

​​SQLiteC/C++接口详细介绍之sqlite3类(十)

返回目录:SQLite—免费开源数据库系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(九) 下一篇:​​SQLiteC/C接口详细介绍之sqlite3类(十一) 30.sqlite3_enable_load_extension&#x…

venv uvicorn python 虚拟服务器外网无法访问

python -m venv .venv source ./.venv/bin/activate pip install -r requirements.txt ./run.sh source ./.venv/bin/activate uvicorn main:app --reload 虚拟web服务器外网访问控制台启动命令用以下代码启动 uvicorn main:app --host 0.0.0.0 --port 8501 --reload 启动到后…

生命周期模型

1. 编码修补模型(Code-and-Fix Model) 定义:这是一种非正式的软件开发过程,开发者开始编写代码,然后在发现问题时修复它们,没有明确的需求分析和设计阶段。特征: 开始编码而不进行大量的设计或…

【Git】本地仓库关联远程仓库

Git 本地项目关联远程仓库 本地 本地已有项目 ● 项目 07.GitLocalTest 包含有一个js ○ test.js 远程仓库 ● 远程仓库地址 ○ https://github.com/Sonnenlicht77/gitTest.git ○ 仓库只有一个 readme.md 关联 1.本地 1.1 本地仓库 ● git init ● git add . ● gi…

掌握人工智能:人工智能工程师必须了解的顶级编程语言

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…