开篇:润墨网以专业的文秘视角,为您筛选了一篇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) {