- 浏览: 308605 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (187)
- JAVA (66)
- JS (2)
- AJAX (9)
- Servlet (5)
- eclipse (4)
- html (2)
- PL/SQL (9)
- SOAP (1)
- other (14)
- JavaScript (8)
- Struts2 (6)
- Spring (10)
- Hibernate (5)
- JSP (1)
- Linux (3)
- WebService (2)
- 数据结构 (1)
- DB (5)
- English (1)
- maven (4)
- Code standard (2)
- SQL (1)
- 软件架构 (1)
- Tomcat (2)
- windows (1)
- HSQL (0)
- Open source framework (0)
- Web (6)
- Compass (0)
- Flex (1)
- OSGI (1)
- python (3)
- groovy (2)
- JPA (2)
- svn (1)
- jetty (1)
最新评论
-
zjfshowtime:
it doesn't work !why
Tomcat 和 Jetty 下 JNDI 配置 DBCP 连接池 -
coco5012:
Useful
sql server日期时间函数 datetime -
烟花弥散:
弱弱的问一句,您的第一个举例中else 后面可以跟判断条件吗? ...
Java高手论道:你还在用if else吗? -
coco5012:
Not very simple
使用assembly plugin实现自定义打包 -
mqlfly2008:
[color=red][size=medium][size=x ...
Java高手论道:你还在用if else吗?
MVC1,MVC2简析(转载)
转载地址:http://www.blogjava.net/sitinspring/archive/2007/11/05/158343.html
一般来说,可以把系统粗略的分为三个层次,视图层,简称为 View,它负责数据的输出和输入;业务层,简称为 Model,它代表程序的实际业务;控制层,简称为 Controller,处理界面的相应并调用业务层进行处理,有时把 View和 Controller两层合称为 UI层。
在程序发展的历史上, MVC模式进过了多次演化, MVC1和 MVC2是两种比较典型的模式,它们的区别主要在于 View和 Model的联系方式上。
( 1 ) MVC1 模式
这种模式主要用于桌面程序 ,使用观察者模式实现 ,具体来说就是让 View充当观察者来观察 Model的变化 ,而用户交互控制的地方用匿名类的方式统一放在 controller中 .
View接受用户输入 ,并将交互数据传递到 Controller.
Controller统一进行处理命令 ,交由 Model处理具体的业务 .
进过处理 Model更新后 ,通知 View进行更新 .
这种模式在旧的桌面应用程序使用较多,但是它的
Model必须继承
Observable类,
View必须实现
Observer接口,人为加大了继承体系的复杂度;而且
Model通知
View的方式使
View必须了解
Model的结构,无谓的加大了两个类的耦合程度。这些缺点使这种模式逐渐淡出了程序舞台。
代码如下:
Control类:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/** */ /**
* 控制类
*
* @author sitinspring(junglesong@gmail.com)
*
* @date 2007-11-5
*/
public class Mvc1Ctrl {
private Mvc1View view;
private Mvc1Model model;
public Mvc1Ctrl() {
view = new Mvc1View();
model = new Mvc1Model();
model.addObserver(view);
handleEvents();
}
// 处理事件响应
private void handleEvents() {
addCloseLintener();
addButtonListener();
addButtonListener2();
}
// 窗体关闭事件相应
private void addCloseLintener() {
view.addWindowListener( new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.out.println( " Exit MVC1 " );
System.exit( 0 );
}
} );
}
private void addButtonListener() {
view.getButton().addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
model.showText();
}
} );
}
private void addButtonListener2() {
view.getButton2().addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
model.showText2();
}
} );
}
}
视图类(View) :
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
/** */ /**
* 视图类(View)
*
* @author sitinspring(junglesong@gmail.com)
*
* @date 2007-11-5
*/
public class Mvc1View extends JFrame implements Observer {
private static final long serialVersionUID = 621145935910133202L ;
private JButton button;
private JLabel label;
private JButton button2;
private JLabel label2;
public Mvc1View() {
locateView( 300 , 200 );
this .setTitle( " MVC1 Program " );
setupComponents();
this .setVisible( true );
}
// 当模块更新时,此函数会被调用
public void update(Observable o, Object arg) {
Mvc1Model model = (Mvc1Model) o;
if (model.getUpdateState().equals(Mvc1UpdateState.UpdateLabel)) {
label.setText(model.getResponseText());
} else if (model.getUpdateState().equals(Mvc1UpdateState.UpdateLabel2)) {
label2.setText(model.getResponseText());
}
}
// 定位程序在屏幕正中并设置程序大小
private void locateView( int width, int height) {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
this .setSize(width, height);
this .setLocation(screenSize.width / 2 - width / 2 , screenSize.height
/ 2 - height / 2 );
}
// 初始化内部组件
private void setupComponents() {
button = new JButton( " 点击响应事件1 " );
label = new JLabel( " 等待事件响应1 " );
button2 = new JButton( " 点击响应事件2 " );
label2 = new JLabel( " 等待事件响应2 " );
setLayout( new GridLayout( 2 , 2 ));
add(button);
add(label);
add(button2);
add(label2);
}
public JButton getButton() {
return button;
}
public JButton getButton2() {
return button2;
}
}
模块类 :
import java.util.Observable;
/** */ /**
* 模块类
* @author sitinspring(junglesong@gmail.com)
*
* @date 2007-11-5
*/
public class Mvc1Model extends Observable {
private String responseText;
private String updateState;
// 用于通知View更新,此函数被调用后View的update函数会被调用
private void notifyView() {
setChanged();
notifyObservers();
}
public void showText() {
updateState = Mvc1UpdateState.UpdateLabel;
responseText = " 事件1响应完毕 " ;
notifyView();
}
public void showText2() {
updateState = Mvc1UpdateState.UpdateLabel2;
responseText = " 事件2响应完毕 " ;
notifyView();
}
public String getResponseText() {
return responseText;
}
public String getUpdateState() {
return updateState;
}
}
更新状态辅助类:
public class Mvc1UpdateState {
public static final String UpdateLabel = " updateLabel " ;
public static final String UpdateLabel2 = " updateLabel2 " ;
}
MVC1示例代码下载:
http://www.blogjava.net/Files/sitinspring/MVC1.rar
(
2)
MVC2模式
这种模式首见于网络程序,起初因为 Model无法通知到 Web程序的界面而发明,这种模式采用 Controller做中介者,一方面取得 View的输入,然后交由 Model层处理,之后再把返回的数据传递到 View。
View接受用户输入 ,并传递到 Controller.
Controller统一进行处理命令 ,交由 Model处理具体的业务 .
进过处理 Model更新后 ,Controller会选一个 View并把 Model内容传递 (request,session)给它 (forward).
然后 View进行显示 .
这种模式相对
MVC
优势很明显,首先
Model
和
View
无需继承甚么东西,其次
Model
和
View
无需了解对方的存在,只需准备相应的接口而已;缺点是
Controller
层变得相对复杂了。
代码如下:
控制类:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/** */ /**
* 控制类
*
* @author sitinspring(junglesong@gmail.com)
*
* @date 2007-11-5
*/
public class Mvc2Ctrl {
private Mvc2View view;
private Mvc2Model model;
public Mvc2Ctrl() {
view = new Mvc2View();
model = new Mvc2Model();
handleEvents();
}
发表评论
-
The Principles of Good Programming
2012-03-23 17:23 755转载:http://www.jdon.com/jivejd ... -
如何查看端口被是否被占用
2012-03-19 10:52 0在windows命令行窗口下执行: C:\>nets ... -
broadleaf备忘录
2012-03-11 19:59 0开发环境URL: http://www.broadle ... -
电子书下载资源推荐
2012-03-01 22:04 6752电子书下载资源推荐 落葉飛舞 » 技巧工具 ... -
多看系统使用技巧
2012-03-01 13:30 3596多看系统使用技巧: ... -
外汇专业词汇
2010-09-05 11:39 4044揸:买入(源自粤语)沽 ... -
主动地去工作
2010-08-29 22:19 1259在现实世界里,有些受 ... -
如何提高自己的自信心
2010-08-28 19:52 1539最主要的就是每天早晨 ... -
同事能力比你强怎么办
2010-08-26 20:56 34261. 自然就好,不要说因 ... -
如何和新同事相处
2010-08-26 20:37 13931.多注意同事的眼神,从眼神中去寻找每个同事的性格、处世方式, ... -
日语自我介绍
2010-08-14 22:56 1228はじめして、私は陳剛と申します。今年は二十九歳です。出身 ... -
详细介绍在tomcat中配置数据源以及数据源的原理
2010-06-08 13:37 927前言 本文根据实例详细介绍了如何在tomcat中配置 ... -
DOS下的subst命令
2010-05-31 14:35 1290subst :路径替换 ,将路径与驱动器号关联,就是把一个目 ... -
Jxplorer说明文档
2010-05-25 13:02 1361JXplorer is an open source Java ... -
An Introduction to LDAP
2010-05-25 12:44 991An Introduction to LDAP Mic ...
相关推荐
Spring MVC A Tutorial(2nd) 英文mobi 第2版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Spring MVC A Tutorial(2nd) 英文epub 第2版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
MVC3使用EF框架例子源码(比例适合...2,一定要装MVC3,Entity Framework 4 3,附加数据库后需要修改web.config中的数据库连接字符串 开发环境为Visual Studio 2010,数据库为SQL Server 2008,数据库文件在 51aspx转载
Spring MVC Beginners Guide(2nd) 英文azw3 第2版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
MVC模式(跟着敲小白也能看得懂的案例)中的代码和SQL设计。MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使 MVC 设计模式被分成三个核心层:视图层、控制层、模型层。它们各自处理自己的任务,各...
Bootstrap for ASP.NET MVC(2nd) 英文mobi 第2版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Spring MVC Cookbook 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Pro Entity Framework Core 2 for ASP.NET Core MVC 英文无水印原版pdf pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn...
一篇很简单的文章,让我学会了mvvm,由于作者的github上的demo有问题,这个是修复好的demo。...转载:自简书,作者:远处山谷吹来的清风 MVC/MVP/MVVM 三种设计模式简介附demo http://www.jianshu.com/p/545f2b94ee3d
Spring MVC A Tutorial(2nd) 英文azw3 第2版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Learning ASP.NET MVC Programming 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
ASP.NET Core MVC 2.0 Cookbook_Code 源码 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
Spring MVC Designing Real-World Web Applications 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Spring MVC Designing Real-World Web Applications 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
我的个人网站是以Tomcat为服务器,基于Model 1(JSP + Java Bean+servlet+mvc)的方式实现,数据库采用H2数据库。网站主要浏览文章,并且实现了增、删、改、查、分页等功能。 --------------------- 作者:qq_...