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模式的要害代码为:
  
  
  
  import java.util.Observable;
  
  class Sphere extends Observable
  
  {
  
  ....
  
  public void setRadius(double r)
  
  {
  
  myRadius = r;
  
  setChanged(); // Indicates that the model has changed
  
  notifyObservers();
  
  }
  
  ....
  
  }
   
  图3 MVC模式的UML序列图
  
 
 View类的角色TextView类必须实现接口Observer,这意味着类TextView必须是implements
Observe,另外还需实现其中的方法update()。有了这个方法,当模型Sphere类的状态发生改变时,与模型相关联的视图中的
update()方法就会自动被调用,从而实现视图的自动刷新。View类的要害代码如下:
  
  
  
  import java.util.Observer;
  
  import java.util.Observable;
  
  public class TextView extends JPanel implements Observer
  
  {
  
  ......
  
  public void update(Observable o, Object arg)
  
  {
  
  Sphere balloon = (Sphere)o;
  
  radiusIn.setText(“ ”+f3.format(balloon.getRadius()));
  
  volumeOut.setText(“ ”+f3.format(balloon.volume()));
  
  surfAreaOut.setText(“ ” + f3.format(balloon.surfaceArea()));
  
  }
  
  ......
  
  }
  
  
  
  SphereWindow类作为Controller,它主要新建Model与View,将view与Model相关联,并处理事件,其中的要害代码为:
  
  
  
  public SphereWindow()
  
  {
  
  super(“Spheres: volume and surface area”);
  
  model = new Sphere(0, 0, 100);
  
  TextView view = new TextView();
  
  model.addObserver(view);
  
  view.update(model, null);
  
  view.addActionListener(this);
  
  Container c = getContentPane();
  
  c.add(view);
  
  }
  
  public void actionPerformed(ActionEvent e)
  
  {
  
  JTextField t = (JTextField)e.getSource();
  
  double r = Double.parseDouble(t.getText());
  
  model.setRadius(r);
  
  }
  
  
  
  该程序是通过Java中的MVC模式编写的,具有极其良好的可扩展性。它可以轻松实现以下功能:
  
  1. 实现一个模型的多个视图;
  
  2. 采用多个控制器;
  
  3. 当模型改变时,所有视图将自动刷新;
  
  4. 所有的控制器将相互独立工作。
  
  这就是Java编程模式的好处,只需在以前的程序上稍作修改或增加新的类,即可轻松增加许多程序功能。以前开发的许多类可以重用,而程序结构根本不再需要改变,各类之间相互独立,便于团体开发,提高开发效率。
  
  一个模型、两个视图和一个控制器
  
  下面我们讨论如何实现一个模型、两个视图和一个控制器的程序。当用户在图形化用户界面输入一个球体的半径,程序除显示该球体的体积与表面积外,还将图形化显示该球体。该程序的4个类之间的示意图可见图4。
   
  图4一个模型、两个视图和一个控制器的基本结构
  
  其中Model类及View1类根本不需要改变,与前面的完全一样,这就是面向对象编程的好处。对于Controller中的SphereWindows类,只需要增加另一个视图,并与Model发生关联即可。其要害实现代码为:
  
  
  
  public SphereWindow()
  
  {
  
  super(“Spheres: volume and surface area”);
  
  model = new Sphere(0, 0, 100);
  
  TextView tView = new TextView();
  
  model.addObserver(tView);
  
  tView.addActionListener(this);
  
  tView.update(model, null);
  
  GraphicsView gView = new GraphicsView();
  
  model.addObserver(gView);
  
  gView.update(model, null);
  
  Container c = getContentPane();
  
  c.setLayout(new GridLayout(1, 2));
  
  c.add(tView);
  
  c.add(gView);
  
  }
  
  
  
  其程序输出结果见图5。
  
   
  图5 输出结果
  
  一个模型、两个视图和两个控制器
  
  在上面的程序中,我们只能通过键盘输入球体半径,现在我们修改以上程序,利用鼠标放大、缩小右边的球体图形及可改变球体的半径,从而获得球体半径的输入。
  
  此时的MCV模式为一个模型、两个视图和两个控制器,其结构可以见图6,其UML类图可以表示为图7。
  
  其中Sphere、TextView与GraphicsView类与前面完全一样。在主程序SphereWindows中,该类这时不是直接作为Controller,它控制Controller1与Controller2的新建。该程序的要害代码为:
  
  
  
  public SphereWindow()
  
  {
  
  super(“Spheres: volume and surface area”);
  
  Sphere model = new Sphere(0, 0, 100);
  
  TextController tController = new TextController(model);
  
  GraphicsController gController = new GraphicsController(model);
  
  Container c = getContentPane();
  
  c.setLayout(new GridLayout(1, 2));
  
  c.add(tController.getView());
  
  c.add(gController.getView());
  
  }
   
  图6一个模型、两个视图和两个控制器的基本结构
  
  
  图7 一个模型、两个视图和两个控制器的UML类图
  
  当程序SphereWindow运行时,将鼠标移动到球体的外圆处

【转】利用MVC模式开发Java应用程序[组图]的更多相关文章

  1. 利用mvc模式,实现用户的注册

    实现功能:利用mvc模式,实现用户的登陆注册功能 1.程序的框架结构 2个包,bean,以及servlet 3个jsp页面,注册页面,注册成功页面,注册失败页面 mysql驱动 2.编程思想 通过js ...

  2. JavaFX桌面应用-MVC模式开发,“真香”

    使用mvc模块开发JavaFX桌面应用在JavaFX系列文章第一篇 JavaFX桌面应用开发-HelloWorld 已经提到过,这里单独整理使用mvc模式开发开发的流程. ~ JavaFX桌面应用开发 ...

  3. 【Web开发】Mean web开发 01-Express实现MVC模式开发

    简介 Mean是JavaScript的全栈开发框架.更多介绍 用Express实现MVC模式开发是Mean Web全栈开发中的一部分. Express 是一个基于 Node.js 平台的极简.灵活的 ...

  4. Swing用于开发Java应用程序用户界面

    Swing是一个用于开发Java应用程序用户界面的开发工具包. 以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格. Swing开发人员只用很少的代码就可以利用Swing丰富 ...

  5. Spring MVC + Spring + Mybitis开发Java Web程序基础

    Spring MVC + Spring + Mybitis是除了SSH外的另外一种常见的web框架组合. Java web开发和普通的Java应用程序开发是不太一样的,下面是一个Java web开发在 ...

  6. MVC模式在Java Web应用程序中的实例分析

    MVC在软件架构中是一种比较重要的架构思想,已经被广泛的应用在实际的java web项目开发中,我们所要了解和掌握的是mvc的架构思想和使用mvc模式来分析和解决问题的方法.当然相同或不同的项目都有各 ...

  7. 利用Scala语言开发Spark应用程序

    Spark内核是由Scala语言开发的,因此使用Scala语言开发Spark应用程序是自然而然的事情.如果你对Scala语言还不太熟悉,可 以阅读网络教程A Scala Tutorial for Ja ...

  8. Extjs MVC模式开发,循序渐进(一)

    本文讲述extjs mvc的Helloworld,tabPanel,event,页面布局layout等内容. 本页包含:MVC模式案例(一)~MVC模式案例(六),从搭建extjs mvc到点击按钮生 ...

  9. 利用Android studio开发Java工程

    1. 新建项目 新建项目肯定是去new,但到底是new project还是new module是一个问题.在这解释一下,如果new project的话是新建一个工程,相当于新建一个工作区,工程中可以有 ...

随机推荐

  1. 习总强调网络安全 ,咱们国产SSL证书必须加快普及速度

    上海(2014 年 2 月 27 日)—— 央视新闻联播 27 日报道中央网络安全和信息化领导小组于当日成立的消息及习总在该小组首次会议上的重要讲话.据悉,该小组由习总任小组长,李克强.刘云山任副组长 ...

  2. php中curl不支持https的解决办法

    在php程序中使用curl去访问https站点时,报错:Protocol https not supported or disabled in libcurl 该错误信息表示php当时编译时使用的cu ...

  3. java面试笔试试题http://www.jobui.com/mianshiti/it/java/6827/

    一.判断题(每题1分,共10分)1.Applet是一种特殊的Panel,它是Java Applet程序的最外层容器.()2.Java的源代码中定义几个类,编译结果就生成几个以.class为后缀的字节码 ...

  4. 2013 US Open Award Ceremoney

    http://v.youku.com/v_show/id_XNjA3MjU3MzY4.html?firsttime=0 Singapore how about    another hand   tr ...

  5. 深入剖析 HTML5

    作为新一代的 HTML 标准,HTML5 不仅强化了 Web 网页的表现性能,还追加了本地数据库等 Web 应用的功能.虽然 HTML5 标准仍处于完善之中.然而,大部分新版本的浏览器已经能够支持某些 ...

  6. FreeMarker中文API手冊(完整)

    FreeMarker概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用 ...

  7. 深入了解android平台的jni(一)

    android中很多Java类都具有native接口,这些接口由本地实现,然后注册到系统中.     主要的JNI代码放在以下的路径中:frameworks/base/core/jni/,这个路径中的 ...

  8. Linux显示全部执行中的进程

    Linux显示全部执行中的进程 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps aux | less USER PID %CPU %MEM VSZ RSS ...

  9. CSS 居中大全【转】

    我看最近微博流行 CSS 居中技术,老外码农争相写相关的文章,一篇赛一篇的长啊,我把几篇归纳总结了一下,算是笔记. 孔乙己曾说:“茴香豆的回字有四种写法”,万一哪天有个面试官问你:“居中一共有几种写法 ...

  10. Eclipse快捷键 10个最有用的快捷键【转】

    Eclipse中10个最有用的快捷键组合  一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升.    ...