热门文章 | 热门软件| 热门源码 | 热门电影 | 知识库 | 联系我们
软件 源码 教程 影视 健康 招聘
  HTML | JavaScript | ASP | PHP | JSP | NET | VB | VC | VF | Windows | Linux | Mysql | Mssql | Oracle | Struts 
当前位置: 创世纪计算机资源网 -> 文章频道 ->java 
站内搜索:
设计模式:实战MVC模式(1)
作者:佚名 来源:赛迪社区 整理日期:2007-2-15

设计模式:实战MVC模式

内容:
1.MVC
2.Observer接口
3.模型Model
4.视图View
5.控制器Controller
6.运行程序  

--------------------------------------------------------------------------------

MVC

“模型-视图-控制器(Model-View-Controller,MVC)结构是为那些需要为同样的数据提供多个视图的应用程序而设计的,它很好的实现了数据层与表示层的分离。例如下图中的例子:


 
们看到,图中的几组数据以不同的形式(View)表现出来,一个是表格样式,一个是图形样式。

MVC把这种应用程序分为三种对象类型:
模型:维护数据并提供数据访问方法。
视图:给制模型的部分数据或所有数据的可视图。
控制器:处理事件.
以下是典型的MVC通信方式, 
 

事件由控制器来处理,控制器接收用户事件,并根据事件的类型来改变模型。
视图事先会在模型中登记,当模型数据发生改变时,马上通知已向此模型登记的每个视图。
视图从模取得最新的数据并刷新自己.
要实现MVC,最重要的一个环节是使用Design  Pattern中的Observer模式。Observer模式允许某个对象在所观察的对象发生修改时通知多个观察者(Observer).

下面们就以实例来讲解如何用Obserer模式实现MVC的程序结构。在的例子中,要实现一个学生年龄显示的例子。分别用清单和图形的方式显示每个学生的年龄。当年龄改变时,自动更新显示。

Observer接口

为了实现观察的对象发生修改时通知多个观察者,通常要在被观察者与观察者之间有一个小的接口,如下:
/*  file:  Observer.java  */
public  interface  Observer
{
        public  void  dataUpdate(Model  model);
}
这个接口中有一个dataUpdate(Model  model)方法,只要实现了这个接口对象,就成了一个观察者。

模型Model

再来建立一个数据模型。在的例子中,先建立了一个数据对象:
/*  file:  Data.java  */
public  class  Data
{
        public  int  value;  //  学生年龄值
        public  String  name; //  学生名
}
现在来建立一个Model:
/*  file:  Model.java  */
import  java.util.*;
public  class  Model
{
        ArrayList  data  =  new  ArrayList();
        ArrayList  observer  =  new  ArrayList();
        public  Model()
        {        super();
        }
        public  Model(int[]  value,  String[]  name)
        {
                for  (  int  i  =  0;  i<  value.length;  i++  
                {
                        addData(value,name);
                }
        }
        public  Model(Data[]  data)
        {
                for  (  int  i  =  0;  i<  data.length;  i++  
                {
                        addData(data);
                }
        }
        public  void  addData(int  value,  String  name)
        {
                Data  data  =  new  Data();
                data.value  =  value;
                data.name  =  name;
                this.data.add(data);
        }
        public  void  addData(Data  data)
        {
                this.data.add(data);
        }
        public  Data  getData(int  idx)
        {
                return  (Data)(data.get(idx));
        }

        public  int  size()
        {
                return  data.size();
        }
  //  用来向模型中登记观察者.
        public  void  registerObserver(Observer  o)
        {
                observer.add(o);
        }
        public  void  removeObserver(Observer  o)
        {
                observer.remove(o);
        }
        //  当数据改变时,由Controller调用此方法,通知各个Observer,刷新视图.
        public  void  changeModel(Model  model)
        {
                data.clear();
                for  (int  i=0;  i                {
                        this.addData(model.getData(i));
                }
                dataUpdate();
        }
        private  void  dataUpdate()
        {
                for  (Iterator  i  =  observer.iterator();  i.hasNext();  
                {
                        Observer  o  =  (Observer)(i.next());
                        o.dataUpdate(this);
                }
        }
}
这个模型提供各种数据访问的方法。并提供一个changeModel(Model  model)方法供Controller访问。还提供一个registerObserver(Observer  o)方法,用来向Model中登记观察者Observer。

[1]  [2]  [3]  
相关文章