上文(设计模式-访问者模式):https://blog.csdn.net/qq_16498553/article/details/106912484


目录

背景

MVC模式模式是什么?

角色:

优点:

缺点:

MVC模式可以干嘛?

MVC模式类图

实现代码

源码下载:https://gitee.com/hong99/design-model/issues/I1IMES

结果

源码下载:https://gitee.com/hong99/design-model/issues/I1IMES

最后


背景

记得当前通过serverlet来写jsp页面的时候有些代码还是通过后面直接写到页面来的,好恶心,什么东西都是通过后面来写的,包括静态代码,并且维护极其费时费力,真是辛酸岁月,好在后面mvc很好解决了该问题。

MVC模式模式是什么?

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

角色:

Model(模型):主要负责数据库操作,以及相关业务逻辑的实现,为视图层展示提供数据。

View(视图):主要负责系统与用户交互,以及数据的渲染;

Controller(控制器):用户请求的入口,接收和返回对应的数据模型。

优点:

结构清晰、方便维护:由于mvc各层有各层的职责所以很方便管理和维护,并且代码复用率也很高;

低耦合:各层之间互相分离,职责不同。

缺点:

mvc由于分层明确,实现起来相关的数据流流转比较复杂。

MVC模式可以干嘛?

mvc主要是对java封装、继承、多态一种非常好的呈现,减少维护成本、各层职责清晰,并且管理方便,主要解决的问题将原来所有的逻辑都放到统一一个层级中,解耦成mvc三层各层分工明确。

个人理解:

mvc,比如我们手机看到的一些新闻,所看到的是视图层(view),而你所请求的网页地址就是入口(controller),通过后台模型层(model)返回了新闻信息。

MVC模式类图

实现代码

源码下载:https://gitee.com/hong99/design-model/issues/I1IMES

/*** @Auther: csh* @Date: 2020/6/23 14:58* @Description: 视图层(view)*/
public class NewsView {public void viewNews(NewsModel model){System.out.println("新闻标题:"+model.getTitle());System.out.println("新闻内容:"+model.getText());}
}
/*** @Auther: csh* @Date: 2020/6/23 14:53* @Description:新闻信息 模型层*/
public class NewsModel implements Serializable {private String title;private String text;public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getText() {return text;}public void setText(String text) {this.text = text;}public NewsModel(String title, String text) {this.title = title;this.text = text;}
}
/*** @Auther: csh* @Date: 2020/6/23 15:01* @Description: 控制器(controller)*/
public class ViewController {private NewsModel model;private NewsView view;public ViewController(NewsModel model, NewsView view) {this.model = model;this.view = view;}public void viewNews(){view.viewNews(model);}
}
/*** @Auther: csh* @Date: 2020/6/23 15:02* @Description: mvc 用户查看新闻*/
public class Client {public static void main(String[] args) {NewsModel newsModel = new NewsModel("中央新闻","12456497894");NewsModel newsMode2 = new NewsModel("中央新闻2","12456497894");NewsView newsView = new NewsView();NewsView newsView2 = new NewsView();ViewController viewController = new ViewController(newsModel,newsView);viewController.viewNews();ViewController viewController2 = new ViewController(newsMode2,newsView2);viewController2.viewNews();}
}

结果

新闻标题:中央新闻
新闻内容:12456497894
新闻标题:中央新闻2
新闻内容:12456497894

源码下载:https://gitee.com/hong99/design-model/issues/I1IMES

最后

mvc设计模式和mvc框架是不同的,这个需要各位注意下,因为mvc设计模式只是一种思想,而mvc框架里面不单单用了这种思想,而在这种思想基础上去搭建框架。spring mvc 、structs都是mvc的设计思想衍生而来。mvc在真正工作中大部都是以该模式呈现,比如上面说的spring mvc、spring boot 、spring cloud等。

参考文章:

https://mp.weixin.qq.com/s/GuO5wdo2rJgvHH6mErLgqw

设计模式-MVC模式相关推荐

  1. (iOS-框架封装)iOS设计模式——MVC模式

    MVC模式是iOS编程中提到的最多次的设计模式,也是使用最频繁的设计模式之一.网络上有很多的MVC模式的分析文章,但都是从原理上来解释,很少能找到配套的案例来说明到底在实际的项目中要如何的使用这种模式 ...

  2. 李炎恢老师PHP第三季视频课程(设计模式+MVC模式+SMARTY+在线商城)

    课程目标 掌握MVC搭建.在线商城等技能. 适用人群 对原生的MVC搭建,在线商城系统感兴趣的用户, 课程简介 很多学生在学习PHP第二季和第三季的时候,发现难度突然加大,导致学习出现障碍.这里说明一 ...

  3. 【iOS】MVC模式

    什么是MVC? MVC设计模式的主要宗旨是把所有的对象分为三个大类,model类,view类和controller类. MVC并不是一种设计模式,而是一种架构模式,用以描述应用程序的结构以及结构中各部 ...

  4. python的设计模式之MVC模式

    模型-视图-控制器模式 关注点分离(Separation of Concerns,SoC)原则是软件工程相关的设计原则之一.SoC原则背后的思想是将一个应用切分成不同的部分,每个部分解决一个单独的关注 ...

  5. 设计模式中,MVC模式与MVT模式的区别

    1.MVC模式 有一种程序设计模式叫MVC,其核心思想是分工.解耦,让不同的代码块之间降低耦合,增强代码的 可扩展性和可移植性,实现向后兼容. MVC的全拼为Model-View-Controller ...

  6. 【Django框架设计模式】MVC模式与MTV模式区别

    在Django中的MTV模式是MVC模式的迁移,其中MTV模式中将MVC模式中的V(视图)= V(视图)+ T(模板). MVC设计模式 MVC,是模型(Model).视图(View).控制器(Con ...

  7. ea设计 mvc模式_MVC设计模式

    写了几天代码,然后对之前学到的知识,进行反思,写出来放在QQ空间上和博客上,目的是互相学习,然后希望可以得到编程高手的补充!这是我转载加修改的博客. 这是我做了2.3天左右的JavaWeb管理系统,b ...

  8. 谈 三层结构与MVC模式的区别

    谈 三层结构与MVC模式的区别 在CSDN和园子里有朋友谈到三层与MVC的区别,以前也有人抛出这个问题,本人对来公司面试的朋友也偶乐会提这方面的问题.     那么我也来讲讲我对这两者的理解吧.    ...

  9. 说说设计模式~建造者模式(Builder)

    建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC ...

最新文章

  1. 2015.11.3 RichBox改变若干文本颜色
  2. 原始套接字学习笔记(1)
  3. 迁移到云:渐进但不可逆转
  4. 红帽集群套件RHCS四部曲(维护篇)
  5. php-css外边距
  6. mysql 选择前4个_mysql从4个表中选择
  7. java div2_系统学习 javaweb2----HTML语言2
  8. 欠拟合和过拟合的一般解决方法
  9. 相机成像原理及坐标变换
  10. 基于SSM的校园二手交易平台的设计与实现
  11. 【筹码分析】改版通达信PAVE筹码引力分析个股强势区和走势
  12. mysql中间件研究(Atlas,cobar,TDDL) | 日志 | 果壳网 科技有意思
  13. 如何快速查找网页的内容
  14. leetcode:32. 最长有效括号
  15. stm32f10x_conf.h是个什么东东?
  16. FIRST集和FOLLOW集的计算
  17. react package.json 里面的小尖角号和波折号各什么意思
  18. 转换英文货币大小写的代码
  19. 游戏建模师行业很难吗?十年建模师来告诉你
  20. shell图书管理系统

热门文章

  1. 大家都来学 Java(一)快乐入门
  2. MAC下安装GDAL库
  3. 数字图像处理与Python实现-图像滤波-Frangi滤波器
  4. 网络攻击常见技术方法及案例分析
  5. GeoJson的生成与解析,JSON解析,Java读写geojson,geotools读取shp文件,Geotools中Geometry对象与GeoJson的相互转换
  6. Life -- MY REAL LIFE
  7. 谷歌真被ChatGPT搞慌了!两位创始人紧急回归制定战术,搜索广告根基不容有失...
  8. Apollo自动驾驶50讲笔记
  9. 使用kubekey的all-in-one安装K8S1.24及KubeSphere3.3
  10. 电脑中没有显示网络连接到服务器地址,电脑没有网络可以连接到服务器地址