java之MVC设计模式浅析

上一篇 / 下一篇  2017-07-17 19:08:40 / 个人分类:java

Java之MVC设计模式浅析

一、设计模式简介:

在学习MVC设计模式之前,先简单说一下什么是代码的设计模式。

官方的说法是:设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。设计模式是软件工程的基石脉络,如同大厦的结构一样。

使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化。

那什么是MVC设计模式呢?

MVC指的就是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)判断该字符串是否为回文字符串,如果是则控制台输出“合法字符串”,否则控制台输出“非法字符串”。

 

需求分析及代码:

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("非法字符串");

}

}

}

 

View:就本题而言,用户在跟界面交互的过程中只有两个功能,一是在控制台显示结果,一个就是获取键盘录入的数据。那么View层的代码为:

import java.util.Scanner;

 

/**

 * 视图类:用户看到并与之交互的界面。

 *

 * @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;

}

}

 

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应用到规模并不是很大的应用程序通常会得不偿失。


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2017-09-09  
     12
3456789
10111213141516
17181920212223
24252627282930

我的存档

数据统计

  • 访问量: 45
  • 日志数: 1
  • 建立时间: 2017-07-17
  • 更新时间: 2017-07-17

RSS订阅

Open Toolbar