当前位置: 首页 > news >正文

设计模式之MVC模式

文章目录

  • MVC模式
    • 概要
      • 意图
      • 主要解决的问题
      • 使用场景
      • 实现方式
      • 关键代码
      • 应用实例
      • 特点
        • 优点
        • 缺点
      • 使用建议
      • 注意事项
    • 代码实现

MVC模式

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

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

概要

意图

将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller),以实现关注点分离。

主要解决的问题

解决了应用程序中业务逻辑、数据和界面显示的耦合问题,使得开发和维护更加清晰和简单。

使用场景

当需要将数据、业务逻辑和界面显示分离,以便于独立开发和维护时。

实现方式

模型(Model):负责数据和业务逻辑,通常包含数据存储、检索和业务规则。
视图(View):负责显示数据(模型)的用户界面,不包含业务逻辑。
控制器(Controller):接收用户的输入,调用模型和视图去完成用户的请求。

关键代码

模型:包含业务逻辑和数据状态。
视图:包含展示逻辑,将模型的数据渲染为用户界面。
控制器:包含逻辑,用于响应用户输入并更新模型和视图。

应用实例

Web应用程序:用户通过浏览器(视图)发送请求,服务器端的控制器处理请求,模型进行数据处理。

特点

优点

关注点分离:将数据、业务逻辑和界面显示分离,降低耦合度。
易于维护:每个组件负责特定的任务,便于单独开发和维护。
可扩展性:可以独立地替换或更新模型、视图或控制器。

缺点

可能增加复杂性:对于简单项目,引入MVC可能会增加不必要的复杂性。
性能问题:如果不正确使用,可能会导致性能问题。

使用建议

当开发大型应用程序,需要清晰分离数据、业务逻辑和用户界面时,考虑使用MVC模式。

注意事项

确保模型、视图和控制器之间的交互清晰,避免相互依赖。

包含的几个主要角色

  • 模型(Model): 管理数据和业务逻辑。
  • 视图(View): 显示模型中的数据,提供用户界面。
  • 控制器(Controller): 接收用户输入,调用模型和视图进行处理。

代码实现

model实现

public class Student {private String name;private int age;private String addr;private float score;public Student() {this("nsh",28,"河南省",98);}public Student(String name, int age, String addr, float score) {this.name = name;this.age = age;this.addr = addr;this.score = score;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}public float getScore() {return score;}public void setScore(float score) {this.score = score;}
}

定义View接口,StudentView的实现

public interface View {void view();
}public class StudentView implements View{private Student student;public void setStudent(Student student) {this.student = student;}@Overridepublic void view() {String msg = "studeng info:\n" +"student name:" + student.getName() + "\n" +"student age:" + student.getAge() + "\n" +"student addr:" + student.getAddr() + "\n" +"student score:" + student.getScore() + "\n";System.out.println(msg);}
}

定义ModelAndView

public class ModelAndView {private Student student;private View view;public ModelAndView(Student student, View view) {this.student = student;this.view = view;((StudentView)this.view).setStudent(this.student);}public void view(){this.view.view();}
}

实现Controller


public class StudengController {public ModelAndView handler(){// do somethine ,例如从数据库中读取student 信息Student student = new Student();StudentView view = new StudentView();return new ModelAndView(student,view);}
}

客户端

public class Client {public static void main(String[] args) {StudengController studengController = new StudengController();ModelAndView modelAndView = studengController.handler();modelAndView.view();}
}

相关文章:

设计模式之MVC模式

文章目录 MVC模式概要意图主要解决的问题使用场景实现方式关键代码应用实例特点优点缺点 使用建议注意事项 代码实现 MVC模式 MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。 Model(模型&a…...

u盘数据要在哪台电脑上恢复?u盘数据恢复后保存在哪里

在数字化时代,U盘已成为我们日常生活中不可或缺的数据存储设备。然而,由于各种原因,U盘中的数据可能会意外丢失,这时数据恢复就显得尤为重要。但是,很多人对于在哪台电脑上进行U盘数据恢复以及恢复后的数据应保存在哪里…...

Selenium 定位编辑框有span

当使用Selenium进行网页自动化测试时,定位一个包含span元素的编辑框可能会有些棘手,因为span通常用于对其他HTML元素进行分组或应用样式,而不一定是真正的可输入字段。不过,一旦我们确定了正确的策略,定位编辑框还是相…...

mac 安装HomeBrew

目录 一、HomeBrew是什么?二、HomeBrew命令1、检查是否安装HomeBrew2、更新brew版本 三、安装HomeBrew1、官网安装2、100%成功安装 一、HomeBrew是什么? homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等功能…...

Windows C++: 剪切板内容获取

获取Windows用户的剪切操作是部分程序的需求,我们同样可以利用这个功能做一个小工具来记忆曾经的复制内容。 代码示例 if (OpenClipboard(nullptr)) {// 打开剪贴板HANDLE hClipboardData GetClipboardData(CF_UNICODETEXT);// 获取剪贴板中的Unicode文本数据if …...

1panel运维面板

文章目录 引言I 安装防火墙II 借助运维面板1panel运维面板安装nacos 引言 在 SSH 终端输入以下命令来查看面板入口: 1pctl user-info 提示:修改密码可执行命令:1pctl update password I 安装防火墙 https://1panel.cn/docs/user_manual/hosts/firewall…...

人工智能GPT-4o?

对比分析 在讨论GPT-4o时,我们首先需要了解其前身,即GPT-4,以及其之前的版本。GPT系列从GPT-1到GPT-4经历了多次迭代,每一次都带来了显著的进步。 GPT-4 vs GPT-4o: 1. **参数规模:** GPT-4o在参数规模上…...

python之语法糖

一.语法糖 语法糖不是糖,而是编程语言中的某些特殊写法,这些写法让书写起来更加简洁,容易理解,因此被叫做语法糖 二.语法糖分类 数字分隔符 a 10_0000_0000交换变量值 a 1;b 2 a,b b,a连续比较式 a 90 if 80<a<100: print(‘优秀’)字符串乘法 a ‘_’*10列表拼…...

纷享销客海外合规观点与方案:个人隐私数据保护与数据出入境

出海&#xff0c;已不再是企业的“备胎”&#xff0c;而是必须面对的“大考”&#xff01;在这个全球化的大潮中&#xff0c;有的企业乘风破浪&#xff0c;勇攀高峰&#xff0c;也有的企业在异国他乡遭遇了“水土不服”。 面对“要么出海&#xff0c;要么出局”的抉择&#xf…...

公司面试题总结(四)

19.请解释什么是事件代理&#xff0c;应用场景 ⚫ 事件流的都会经过三个阶段&#xff1a; 捕获阶段 -> 目标阶段 -> 冒泡阶段&#xff0c;而事件委托就是 在冒泡阶段完成 ⚫ 事件委托&#xff0c;会把一个或者一组元素的事件委托到它的父层或者更外层元素上&#xf…...

守护山川,联通希望 —— 北斗户外应急呼叫柱:野外安全的守护神

在大自然的怀抱中&#xff0c;每一次探险和巡检都是对未知的挑战&#xff0c;也是对安全的考验。北斗户外应急呼叫柱&#xff0c;以科技创新为基石&#xff0c;致力于在最偏远、最危险的环境中搭建起生命的桥梁&#xff0c;确保每一次求救都能被听见&#xff0c;每一处危机都能…...

使用canvas制作一个无人机旋转特效

​ 使用HTML5的Canvas API来制作一个无人机旋转特效。这个特效将包括一个无人机图标&#xff08;你可以使用任何你喜欢的图标&#xff09;&#xff0c;它会在一个固定的位置旋转。 首先&#xff0c;我们需要创建一个HTML文件&#xff0c;然后在其中添加一个canvas元素。canvas…...

感受风的速度~2024COSP上海国际户外展为您的骑行之旅锦上添花

夏天已经到来 你是在家里宅着 还是出去晒太阳呢 若是还没抉择好 不如来一场畅快淋漓的追风之旅 抬头可见蓝天白云 低头便是美丽风景 无论是在凉亭闲聊的人们 还是竞相绽放的花朵 每一个场景都令人难忘 骑累了 就到附近的座椅上小憩一番 不用刻意追求速度 尽享“慢…...

冲12分top刊|乳腺癌单细胞细分亚型的正确打开方式

说在前面 学习一下一篇自测数据工作量叠满的单细胞文章&#xff0c;也算是多组学的了&#xff0c;bulkRNAscRNA&#xff0c;还有个伪RNA。 整体是一个单细胞分小群的研究思路&#xff0c;分出三种上皮细胞亚群&#xff08;BM、LP、ML&#xff09;&#xff0c;在功能、免疫、预…...

1-Maven-settings配置

1-Maven-settings配置 整理下Maven工具的使用。 【本地仓库、私服、镜像仓库、远程仓库、中央仓库】 本文基于阅读其他博客和对公司Maven配置的学习整理出来的。希望通过本此学习能对Maven有个整体性的掌控。 顺序&#xff1a;profile.repository > pom文件中的repository &…...

使用服务器搭建个人图床

前置条件 云服务器picGo软件,下载地址开始搭建 发布站点 该步骤不一一说明,主要说明搭建图床的步骤。 可以直接使用nginx或者宝塔面板,发布一个静态资源的文件夹。 假如我发布的文件路径是/www/img,访问地址是http://cc.cc.cc(没有域名ip地址也行) 在img下建立两个文件夹…...

探索 doc 和 docx 文件格式的区别

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…...

kettle学习(利用jsonPath定位,json文件转换)

kettle学习&#xff08;利用jsonPath定位&#xff0c;json文件转换&#xff09; 于数据处理的广袤天地间&#xff0c;我们时常需应对各类繁杂状况与各式格式。Kettle 作为极具威力的数据集成利器&#xff0c;赋予了我们诸多功能与无限可能此次博客里&#xff0c;我们将重点投向…...

选到哪里看命

srand()、rand() srand(static_cast<unsigned int>(time(nullptr))) 是 C 中用于初始化随机数生成器&#xff08;Random Number Generator, RNG&#xff09;的一个常用语句。srand 函数是 C 标准库 <cstdlib> 中的一部分&#xff0c;用于设置随机数发生器的种子值…...

MyBatis插件机制介绍与原理

插件简介 什么是插件 插件是一种软件组件&#xff0c;可以在另一个软件程序中添加功能或特性。插件通常被设计成可以 随时添加或删除 的&#xff0c;而不影响 主程序 的功能。插件可以 扩展 软件程序的功能&#xff0c;这让用户可以根据自己的需求定制软件&#xff0c;提高工作…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...