java之MVC设计模式浅析
来源:互联网 发布:腾道数据 编辑:程序博客网 时间:2024/06/07 05:41
Java之MVC设计模式浅析
一、设计模式简介:
在学习MVC设计模式之前,先简单说一下什么是代码的设计模式。
官方的说法是:设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。设计模式是软件工程的基石脉络,如同大厦的结构一样。
使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化。
那什么是MVC设计模式呢?
VC指的就是Model-View-Controller(模型-视图-控制器)
模型:
Model制定业务逻辑,处理需求核心功能并且反馈处理后数据结果。
Model层返回的数据根据需求的不同有不同的可能,这样一个Model能为多个View提供数据。由于应用于Model的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
视图:
View是用户看到并与之交互的界面,负责处理界面的变化。
MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在View中其实没有真正的处理发生业务,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。
控制器:
Controller接受用户的输入并调用Model和View去完成用户的需求。
Controller本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个Model构件去处理请求,然后用确定用哪个View来显示Model处理返回的数据。
总结:
MVC的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。
二、模型图:
1、View 传送指令到 Controller
2、Controller完成业务逻辑后,要求 Model 改变状态
3、Model 将新的数据发送到 View,用户得到反馈
三、案例讲解:
控制台提醒输入一串字符串,输入后,控制台提示“1”和“2”功能选择,分别对应以下需求:
(1)判断该字符串中是否都是英文字母组成的,如果是则将所有字母转成大写,如果除了英文字母还有其他字符,那么将其他字符输出到控制台上。
(2)判断该字符串是否为回文字符串,如果是则控制台输出“合法字符串”,否则控制台输出“非法字符串”。
需求分析及代码:
View:就本题而言,用户在跟界面交互的过程中只有两个功能,一是在控制台显示结果,一个就是获取键盘录入的数据。那么View层的代码为:
/** * 视图类:用户看到并与之交互的界面。 * * @author jzc * */public class View {static Scanner scanner = new Scanner(System.in);/** * 控制台打印数据的方法 * * @param data * 需要打印的数据 */public static void consolePrint(String data) {System.out.println(data);}/** * 获取键盘录入的值 * * @return 键盘录入数据的字符串表现形式 */public static String getScannerData() {String data = scanner.nextLine();return data;}}
Model:此题有两个需求,所以可以先确定Model层主要负责的核心逻辑有两个,第一个是处理一个字符串数据,返回是纯英文或者不是纯英文字符串两种情况之一的结果并让View层显示给客户看。第二个同样是处理一个字符串数据,返回是是否是回文字符串的结果并让View层显示给客户看。那么Model层的代码为:
/** * 模型类:业务规则和逻辑。此需求有两个需求,分别是判断字符串是否纯英文,是则转换大写,不是则输出非字母的其他字符。另外一个需求是判断回文。 * * @author jzc * */public class Model {/** * 判断是否是英文字符串,是则小写转大写。不是则输出非字母字符。 * * @param data * 需要判断的字符串 */public static void judgeEng(String data) {if (data.matches("[a-zA-Z]{1,}")) {View.consolePrint("该字符串都是英文");data = data.toUpperCase();} else {View.consolePrint("该字符不全是英文");StringBuffer buffer = new StringBuffer();for (int i = 0; i < data.length(); i++) {char c = data.charAt(i);if (!(c <= 'z' && c >= 'a') || (c <= 'Z' && c >= 'A')) {buffer.append(c);}}data = buffer.toString();}// 得到结过后通知控制台打印相应的结果View.consolePrint("处理后的字符串为:" + data);}/** * 判断是否是回文字符串 * * @param data * 需要判断的字符串 */public static void huiWen(String data) {StringBuffer buffer = new StringBuffer(data);String reverStr = buffer.reverse().toString();if (reverStr.equals(data)) {View.consolePrint("合法字符串");}else {View.consolePrint("非法字符串");}}}
Controller:根据题目的需求设定好调用的规则,调用Model完成需求,再根据数据的特点去调用相应的View层代码进行界面显示。那么Controller层的代码为:
/** * 控制器类:接受用户的输入并调用模型和视图去完成用户的需求。 * * @author jzc * */public class Control {// 利用字符串数组储存已设定好的必须使用的字符串数据static String[] datas = { "请输入一串字符串:","请选择要实现功能的序号:\n1、功能一 2、功能二 3、退出", "程序已退出..." };public static void main(String[] args) {function();}public static void function() {while (true) {View.consolePrint(datas[0]);String string = View.getScannerData();View.consolePrint(datas[1]);int select = Integer.parseInt(View.getScannerData());// 使用条件语句,根据结果选择要实现的功能switch (select) {case 1:Model.judgeEng(string);break;case 2:Model.huiWen(string);break;default:View.consolePrint(datas[2]);return;}}}}
四、MVC设计模式的优点:
1、多个视图能共享一个模型。在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑层和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性。
2、由于MVC的三个模块相对独立,改变其中一个不会影响其他两个,所以根据这种设计思想能够构造良好的松耦合的构件。
五、MVC涉及模式的缺点:
MVC的缺点是要完全理解MVC并不是很容易。并且使用MVC需要很妥善的设计和思考。在一定程度上增加了工作量和代码量。所以MVC并不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
- java之MVC设计模式浅析
- 浅析MVC设计模式
- MVC设计模式浅析
- 浅析Java设计模式之适配器模式
- Java设计模式之浅析命令模式
- 设计模式之浅析
- 浅析java设计模式
- 浅析Java IO 设计模式之—装饰器模式
- 浅析JAVA设计模式之代理模式(一)
- 浅析JAVA设计模式之代理模式(二)
- 浅析JAVA设计模式之代理模式(三)
- 浅析JAVA设计模式之代理模式(四)
- 浅析JAVA设计模式之代理模式(五)
- 浅析JAVA设计模式之代理模式(六)
- 浅析JAVA设计模式之代理模式(七)
- 浅析JAVA设计模式之工厂模式(一)
- 浅析JAVA设计模式之工厂模式(二)
- 浅析JAVA设计模式之工厂模式(三)
- 3、触发器(trigger)
- 操作系统之文件管理
- 深度学习框架Caffe图片分类教程
- 历年阿里面试题汇总
- 轻松学,浅析依赖倒置(DIP)、控制反转(IOC)和依赖注入(DI)
- java之MVC设计模式浅析
- Android常用框架----权限管理系列框架
- 自己写的凌乱的笔记
- C++ 继承的构造与析构
- 关于排列组合的一点点自己的见解
- 第1章 Node简介
- 概率论笔记---组合分析(总结)
- 细说多线程之Thread VS Runnable
- POJ 2210