Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 447|回复: 0

[设计模式学习]利用MVC模式开发Java应用程序

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-29 23:59:15 | 显示全部楼层 |阅读模式
    网上有一篇很精典的用来介绍利用MVC模式来开发java应用程序的文章(附后),作者是 龚赤兵 。大家在Google或baidu(此时用baidu搜索比较好)上用“利用MVC模式开发Java应用程序 龚奇兵”关键词来搜索便可找到。建议在看本文前请先阅览这篇文章。

    相关文章:

    (0)实战MVC模式

    (1)我MVC改写的贪食蛇小游戏

    (2)基于MVC架构编写的扫雷游戏  
        我通过实现并扩充这篇文章的例子来介绍MVC模式。程序的输出界面如图所示:
      
       
      
       
       
         
       
                         
         
       
      
      
      
      
      
       


             
    程序要求的功能:
    1.输入球(Sphere)的半径(Radius)、体积(Volume)、表面积(Surface area)任意一个属性的值,其它两个属性的值相应改变,同时右边球体形状也相应变化
    2.利用鼠标拖拽(包括点击)可随意实现球体形状大小,同时左边球体三属性的值相应变化
    实现的过程:
    请看程序的MVC结构   

                      
    细心的朋友会发现我没有按原作者那样利用两个控制器(Controller)去实现,在这里采用的是一个控制器,一个模型(Model),两个视图(View)。这个图转换成文字便是:
    1.控制器SphereWindow类创建一个模型类Sphere,两个视图类TextView和GraphicsView(见图中由SphereWindow类出发的三个箭头指向)
    2.当控制器改变模型的状态时,模型自动刷新与之相关的视图(对应图中间的三个箭头)
    设计思路:
    1.Sphere类存放着球体三个属性的值,并提供了对他们的操作方法(set&get),由于是模型类,需要继承Observable类,注意,在set值时必须加上setChanged(); notifyObservers();两条语句以通知视图,我发生变化了,与我关联的视图也要做相应地变化。
    2.视图类必须实现Observer接口,模型在变化后调用的是你在视图里写的update()方法。
    视图具体是如何变化的呢?计算机处理的是数据,视图变化其实是因为影响他们的数据在化,而这数据从哪来呢,不就是从模型里取(调用get()方法)吗?而模型的set()方法如何调用?很显然需要控制器去实现,一般控制器就是包含main()方法的主程序。
    3.为实现程序的交互性,在控制器程序SphereWindow里添加事件处理以能够随时set模型中数据的值。这里需要注意的是,为完全满足程序的功能,设计时务必注意到一些逻辑关系,如某个控件变化了会影响到哪些控件跟着一起变化等。还有,为完善程序,最好提供一个捕获输入非法字符的异常处理。
    时间仓促,只能写这么一点了,希望大家有所收益。   附: 利用MVC模式开发Java应用程序
         Java是一种面向对象的语言,是实现面向对象编程的强大工具。我们在实际编程中,应该运用并发挥其最大效能。但是,要利用面向对象编程思想,自己独立开发出好的Java应用程序,特别是大、中型程序,并不是一件简单的事情。正是基于面向对象编程思想,人们将实际中的各种应用程序,进行了大量的分析、总结,从而归纳出许多标准的设计模式。将这些设计模式合理地运用到自己的实际项目中,可以最大限度地减少开发过程中出现的设计上的问题,确保项目高质量的如期完成。

    MVC模式介绍

    模型-视图-控制器(Model-View-Controller,MVC)模式就是为那些需要为同样的数据提供多个视图的应用程序而设计的。它很好地实现了数据层与表示层的分离,特别适用于开发与用户图形界面有关的应用程序,其示意图见图1。模式中基本结构定义为:

    控制器 用来处理用户命令以及程序事件的;

    模型 维护数据并提供数据访问方法;

    视图 数据的显示。

    MVC模式基本实现过程为:

    1. 控制器(如Java中的main程序入口)要新建模型;

    2. 控制器要新建一个或多个视图对象,并将它们与模型相关联;

    3. 控制器改变模型的状态;

    4. 当模型的状态改变时,模型将会自动刷新与之相关的视图。



    图1 MVC模式基本结构

    本文要实现的Java应用程序是当用户在图形化用户界面输入一个球体的半径时,程序将显示该球体的体积与表面积。我们首先利用基本MVC模式实现以上程序,然后利用不同数量的模型、视图、控制器结构来扩展该程序。

    基本MVC模式

    该程序主要由三个类构成,分别为Sphere类、TextView类及SphereWindow类。其中Sphere类扮演Model的角色,TextView类为View角色,SphereWindow类为Controller角色。

    Java通过专门的类Observable及Observer接口来实现MVC编程模式。其UML类图及MVC模式的实现方式见图2。



    图2 MVC模式的UML类图

    从图2中可以看出,Model类必须继承Observable类,View类必须实现接口Observer。正是由于实现了上述结构,当模型发生改变时(当控制器改变模型的状态),模型就会自动刷新与之相关的视图。其UML序列图可以表示为图3。

    Model类Sphere,必须扩展Observable类,因为在Observable类中,方法addObserver()将视图与模型相关联,当模型状态改变时,通过方法notifyObservers()通知视图。其中实现MVC模式的关键代码为:


      
      

      
       
      
    1.      
    2.       import java.util.Observable;
    3. class Sphere extends Observable
    4. {
    5. ....
    6. public void setRadius(double r)
    7. {
    8.   myRadius = r;
    9.   setChanged();         // Indicates that the model has changed
    10.   notifyObservers();
    11. }
    12. ....
    13. }
    14.      
    复制代码

       
      


    源码下载:http://file.javaxxz.com/2014/10/29/235915234.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-5 12:18 , Processed in 0.368762 second(s), 38 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表