MVC设计模式应用问题探讨

时间:2022-09-19 08:06:10

MVC设计模式应用问题探讨

【摘 要】设计模式是经过验证的,用于解决特定环境下、重复出现的特定问题的解决方案。经过验证:说明这个设计模式是相对比较优秀的方案,是可行的方案,这样才具有学习、研究和使用价值。对MVC的定义、功能以及所包含的三部分内容进行阐述,并通过其在Java应用程序中的演化过程予以示例解析,从MVC在Java单机版上的应用即观察者模式,逐步过渡到Java Web开发应用中,并给予详细的示例演示和说明。

【关键词】计算机应用技术; MVC;观察者;设计模式;JSP;Servlet;Java Web;事件驱动机制

1 定义阐述

MVC设计模式:是一种架构型设计模式,它本身不引入新的功能,只是指导我们把Web应用结构做的更加合理,实现逻辑与页面相分离。

功能型设计模式:如单例(保证类的实例唯一)、工厂(选择实现)、值对象(封装数据)、DAO(屏蔽变化)等等。

架构型设计模式:结构性的设计模式,只是让程序更具有结构化。

Java中MVC来源思路及进化过程:Servlet =Java + HTML字符串,问题产生了,由于拼字符串太麻烦解决方案:HTML独立出来从而得到 JSP≈HTML+Java脚本(问题又产生了,能解决Servlet问题,但是带来了页面和逻辑混杂)解决方案:MVC(指导我们让Web应用程序结构更加合理)。

2 MVC三部分内容及各部分功能如下

①Model:VO+逻辑层:可以理解为后台部分。

功能:封装应用状态、响应状态查询、暴露应用功能。

②View:视图层的三大功能,典型的如修改页面,触发事件而不处理,纯jsp自己处理,提交给Controller处理。

功能:产生HTML响应、请求模型更新、提供HTML表单用于用户请求。

对比:纯jsp页面中事件处理与页面展示混杂在一起,MVC中事件处理由Controller承担,从而达到逻辑与页面相分离的效果。

③Controller:事件处理过程。

功能:验证HTML请求的数据、将用户数据与模型更新相映射、选择用于响应的视图。

3 MVC演化过程及示例

View用户请求到控制器,控制器状态改变通知Model,Model主动通知View说Model自身已改变,View主动去Model里面去状态查询。

下面先看个标准的MVC单机版的示例:

Eclipse本身就是基于MVC做的,例如当我们打开Eclipse时修改编辑区的代码时,左边的Navigator视图和右边的Outline视图等都会自动更新而随着编辑区的代码改变而改变。实际上这些窗口观察的都是同一个Model,即观察XX.java代码文件的内容,这种多个View观察者观察同一个Model文件的在设计模式中也有个设计模式与其对应即观察者设计模式。

观察者设计模式Java代码示例的如下:

(1)根据前面的内容抽象,首先必须有个被观察的对象,即目标对象叫做MySubject.java:

public class MySubject extends Observable{

private String content="";

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

//需要通知所有观察者

this.setChanged();

this.notifyObservers();

}

}

观察者观察的为目标对象的内容Content,当内容改变了即有人setContent需要通知所有的观察者。

(2)其次应该有些观察者,叫做MyObserver:

public class MyObserver implements Observer{

private String name;

public MyObserver(String name) {

this.name=name;

}

@Override

public void update(Observable o, Object msg) {

//推模型

System.out.println(name+"推过来的===="+msg);

//拉模型

System.out.println(name+"推过来的===="+((MySubject)o))

}

}

MyObserver实现一个update回调方法,即MyObserver去观察MySubject,观察到后采取的处理即这个update方法。这里的观察者又有两种模型,一种是被观察者主动推过来的消息即推模型,另一种就是观察者主动去拉内容即拉模型。其实观察者模式也叫出版订阅模式,推模型即订报的意思,即报刊发行商将报纸送上门服务,拉模型即某个时刻大家主动去报刊亭买报的这种模型。

(3)客户端测试代码,Client.java:

public class Client {

public static void main(String[] args) {

上一篇:一次主机排气阀打开故障修复过程 下一篇:配网自动化系统中AM/FM/GIS技术的运用