欢迎来到天天文库
浏览记录
ID:40313382
大小:90.50 KB
页数:13页
时间:2019-07-30
《设计模式实战MVC模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、设计模式:实战MVC模式[作者:来源:点击数:18] 内容:1.MVC2.Observer接口3.模型Model4.视图View5.控制器Controller6.运行程序MVC“模型-视图-控制器(Model-View-Controller,MVC)结构是为那些需要为同样的数据提供多个视图的应用程序而设计的,它很好的实现了数据层与表示层的分离。例如下图中的例子:我们看到,图中的几组数据以不同的形式(View)表现出来,一个是表格样式,一个是图形样式。MVC把这种应用程序分为三种对象类型:模型:维护
2、数据并提供数据访问方法。视图:给制模型的部分数据或所有数据的可视图。控制器:处理事件.以下是典型的MVC通信方式,事件由控制器来处理,控制器接收用户事件,并根据事件的类型来改变模型。视图事先会在模型中登记,当模型数据发生改变时,马上通知已向此模型登记的每个视图。视图从模取得最新的数据并刷新自己.要实现MVC,最重要的一个环节是使用DesignPattern中的Observer模式。Observer模式允许某个对象在所观察的对象发生修改时通知多个观察者(Observer).下面我们就以实例来讲解如何
3、用Obserer模式实现MVC的程序结构。在我的例子中,我要实现一个学生年龄显示的例子。分别用清单和图形的方式显示每个学生的年龄。当年龄改变时,自动更新显示。Observer接口为了实现观察的对象发生修改时通知多个观察者,通常要在被观察者与观察者之间有一个小的接口,如下:/file:Observer.java/publicinterfaceObserver{ publicvoiddataUpdate(Modelmodel);}这个接口中有一个dataUpdate(Modelmodel)方法,只
4、要实现了这个接口对象,就成了一个观察者。模型Model再来建立一个数据模型。在我的例子中,先建立了一个数据对象:/file:Data.java/publicclassData{ publicintvalue;//学生年龄值 publicStringname;//学生名}现在来建立一个Model:/file:Model.java/importjava.util.;publicclassModel{ ArrayListdata=newArrayList(); ArrayListobse
5、rver=newArrayList(); publicModel() { super(); } publicModel(int[]value,String[]name) { for(inti=0;i6、th;i++) { addData(data[i]); } } publicvoidaddData(intvalue,Stringname) { Datadata=newData(); data.value=value; data.name=name; this.data.add(data); } publicvoidaddData(Datadata) { this.da7、ta.add(data); } publicDatagetData(intidx) { return(Data)(data.get(idx)); } publicintsize() { returndata.size(); }//用来向模型中登记观察者. publicvoidregisterObserver(Observero) { observer.add(o); } publicvoidremoveObserver8、(Observero) { observer.remove(o); } //当数据改变时,由Controller调用此方法,通知各个Observer,刷新视图. publicvoidchangeModel(Modelmodel) { data.clear(); for(inti=0;i
6、th;i++) { addData(data[i]); } } publicvoidaddData(intvalue,Stringname) { Datadata=newData(); data.value=value; data.name=name; this.data.add(data); } publicvoidaddData(Datadata) { this.da
7、ta.add(data); } publicDatagetData(intidx) { return(Data)(data.get(idx)); } publicintsize() { returndata.size(); }//用来向模型中登记观察者. publicvoidregisterObserver(Observero) { observer.add(o); } publicvoidremoveObserver
8、(Observero) { observer.remove(o); } //当数据改变时,由Controller调用此方法,通知各个Observer,刷新视图. publicvoidchangeModel(Modelmodel) { data.clear(); for(inti=0;i
此文档下载收益归作者所有