利用MVC模式开发Java应用程序(转自网络,作者龚赤兵)

MVC设计模式demo 这个是MVC for Android的设计模式范例,可以参考研究下,希望对大家有帮助 立即下载
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面向对象编程的未来方向。

激光条纹中心提取——Steger 激光条纹中心提取-Steger 好久没有记录了,记录一下今天学习的内容,据说Steger在激光条纹中心提取上神一般的存在。文章和代码都分享给大家了哈,其中有四个文件,3个C++,一个python,python一个抠图文件,3个c++包含背景图+原图, 单张图提取, 多张图提取。 分享代码 #include <opencv2\core.hpp> #include <opencv2\highgui.hpp> #include <opencv2\imgproc.hpp> #i 阅读详情

相关推荐

ArcGIS天地图矢量化秘籍:用重分类+ArcScan高效提取建筑轮廓线

本文详细介绍了利用ArcGIS重分类和ArcScan技术高效提取天地图建筑轮廓线的半自动化流程。通过动态中断值计算、多级重分类策略和ArcScan高级矢量化技巧,显著提升城市规划中的矢量化效率与精度,适用于中级GIS用户。

weixin_30879169的博客 475

基于MVC模式和分层模式完成登录和注册

MVC模式是 软件工程 中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。View:视图,为用户提供使用界面,与用户直接进行交互。Model:模型,承载数据,并对用户提交请求进行计算的模块。其分为两类: 一类称为数据承载 Bean:实体类,专门用户承载业务数据的,如 Student、User 等 一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理用户提交请求的。

G503503的博客 1511

小米汽车技术路线

从小米的电子电器架构来看,行业内EEA已经由域集中逐渐过度到域融合+区域控制的架构并向着中央计算+区域控制的方向发展。 而小米汽车智驾算法也从基于高精地图模块化架构,到去高精地图模块化架构,再到端到端架构,这也正是行业对于智驾算法演进的共识。

HITbingdu的博客 3788

使用 MVC 模式,实现简单登录功能 (Kotlin)

使用 MVC 模式,实现简单登录功能 (Kotlin) ViewBinding

Waterme10n的博客 1624

Windows下用Caddy一键搞定LiveKit本地HTTPS部署(含自签名证书避坑指南)

本文详细介绍了在Windows本地开发环境中,如何利用Caddy服务器一键部署支持HTTPS和WSS的LiveKit实时通信服务。文章重点解决了自签名证书的生成与配置难题,提供了完整的避坑指南和防火墙设置,帮助开发者快速搭建安全的WebRTC测试环境,实现局域网内的实时音视频互动。

weixin_29274969的博客 583

DeepSeek-R1模型+Dify实战:5步打造能读PDF的智能客服(附BGE-M3嵌入模型配置)

本文详细介绍了如何利用DeepSeek-R1大模型与Dify平台,结合BGE-M3嵌入模型,构建企业级智能文档问答系统。通过5个步骤,从环境准备到知识库构建,再到智能问答应用开发,帮助企业快速从PDF等文档中提取关键信息,提升工作效率。特别适合处理产品手册、内部规程等专业内容。

convnet3designer的博客 720

利用MVC模式开发Java应用程序

Java是一种面向对象的语言,是实现面向对象编程的强大工具。我们在实际编程中,应该运用并发挥其最大效能。但是,要利用面向对象编程思想,自己独立开发出好的Java应用程序,特别是大、中型程序,并不是一件简单的事情。正是基于面向对象编程思想,人们将实际中的各种应用程序,进行了大量的分析、总结,从而归纳出许多标准的设计模式。将这些设计模式合理地运用到自己的实际项目中,可以最大限度地减少开发过程中出现的设

灰虫轨迹 1189

MemSeg:一种差异和共性来检测图像表面缺陷的半监督方法

本文认为人为创建类内差异和保持类内共性可以帮助模型实现更好的缺陷检测能力,从而更好地区分非正常图像。如图一所示。差异(differences):MemSeg引入人工模拟的异常图像在训练阶段使模型能够区分正常和异常的图像,减轻了半监督学习只能用正常样本进行训练的不足,然后在推理阶段可以直接输入图像无需做任何后处理。共性(commonalities):MemSeg引入了一个记忆池来记录正常样本的通用模式,在训练和推理阶段,比较输入图像和记忆池中的样本之间的差异,为异常区域的定位提供有用的信息。

斯人若彩虹,遇上方知有! 4841

SpringMVC~MVC设计模式、实现用户请求和程序关联、得到用户的参数

这里写目录标题MVC介绍MVC的创建与连接@RequestMapping注解介绍@GetMapping和PostMapping参数重命名、参数映射设置参数必传@RequestParam MVC介绍 MVC是Model View Controller的缩写,是一种架构模式,把软件系统分为三个基本部分:模型、视图、控制器。 MVC的创建与连接 @RequestMapping注解介绍 @GetMapping和PostMapping 参数重命名、参数映射 设置参数必传@RequestParam ...

zxc的博客 1601

YOLO26改进策略【YOLO和Mamba】| 替换骨干 Mamba-YOLO26-T !!! 最新的发文热点

模块是模型中的一个重要组成部分,其主要作用是在模型的初始阶段对输入图像进行处理,方便后续的特征提取和目标检测。以下是对。

Limiiiing的博客 901

Android SELinux——neverallow问题处理(十六)

遇到 neverallow 规则问题,千万别急着去注释/剔除里面原有的规则(原生的尽量别动)。增加 allow 规则是常见的解决办法,但是随着 android 版本的升级,系统对 SELinux 的管控越来越严,增加了大量的 neverallow。一般情况下,向默认标签授予权限的做法是错误的,其中许多权限都是 neverallow 规则所不允许的。按照上面方法去添加 SELinux 可能会违反了 neverallow 规则,编译时候会报 neverallow 相关的错误。

小旭的专栏 2681

基于MVC模式的用户登录

2021.06.12第1关:编写用户登录页面任务描述代码第2关:登录验证任务描述代码 第1关:编写用户登录页面 任务描述 本次实训我们要实现一个MVC的登陆功能: 本关我们要实现的是登陆功能的第一步:编写登陆表单,在jsp中编写表单,设置用户名字段userName和用户密码字段password,并设置请求的servlet路径为login。 相关知识(略) 效果图如下(无需给表单添加样式): 代码 <%@ page language="java" contentType="text/html;

qq_45823118的博客 8373

Electron - Electron failed to install correctly, please delete node_modules/electron and try install

Electron安装失败:Electron failed to install correctly, please delete node_modules/electron and try installing again,electron安装报错:Electron failed to install correctly...解决方案,Electron 未能正确安装,请删除 node_modules/electron,然后再次尝试安装,如何解决这个问题,手把手教你解决,在yarn dev时报错,electr

🏆 前端领域优质创作者 4368

使用MVC模式实现简单的用户登录验证程序

使用MVC模式实现简单的用户登录验证程序 文章目录使用MVC模式实现简单的用户登录验证程序程序说明一、定义实体模型来表示数据二、定义业务模型来处理业务三、编写Servlet处理请求四、编写视图五、运行截图 程序说明 程序包括实体模型User、业务模型UserCheck、控制器LoginCheckServlet和两个试图页面,即登录页面和登录成功页面。 一、定义实体模型来表示数据 User类用来创建试题模型存储用户信息,代码如下: package com.servlet; public class

w_1106的博客 5782

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

实验七 Spring MVC 应用

实验七 Spring MVC 应用 实验内容  使用 Spring MVC 框架实现用户登录功能,登录成功后显示当前用户的 信息;如果登录失败则显示登录失败的页面。  使用 Spring MVC 的数据绑定将输入的用户名和密码封装成一个类在服 务端进行处理。  使用拦截器实现只有登录成功的用户才能访问某些特定的页面,如果非 登录成功则提示相应的错误信息。 实现界面: 目录: UserController.java package controller; import javax.servlet.

qq_50988206的博客 5059

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

基于MVC模型和分层模式完成登录和注册

Model、view、Controller即模型、视图、控制器。是软件的一种架构模式(Architecture pattern)。MVC要实现的目标是将软件的用户界面和业务逻辑分离,可提高代码可扩展性、可复用性、可维护性、以及灵活性。View(视图):用户的操作界面。如:html、jsp。Model(模型):具体的业务模型与数据模型。如:service、dao、pojoController(控制):处理从视图层发送的请求,并选取模型层的业务模型完成响应的业务实现,并产生响应。如:Servlet。

m0_73671382的博客 2367

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

MVC模式(跟着敲小白也能看懂的MVC案例)

MVC模式看不懂?一个案例带你理解,跟着敲下来,小白也能理解了。

EP的别三日 1303

MVC开发模式

MVC开发模式

gegezaoshanghao的博客 3178

MCV、MVVM 和 MEF三者的区别

MCV:关注分离 UI 和业务逻辑,适用于 Web 和桌面应用程序。MVVM:扩展了 MCV,特别适用于 WPF 和 Silverlight 等 XAML 应用程序,强调数据绑定和命令模式。MEF:关注模块化和可扩展性,通过导入和导出机制来动态加载和管理部件,适用于需要高扩展性的应用程序。每种模式和框架都有其特定的应用场景,选择哪种取决于具体的开发需求和环境。希望这篇文章能够帮助大家更好地理解 MCV、MVVM 和 MEF 的区别和应用场景。如果你有任何问题或建议,欢迎在评论区留言。

moshang0104的博客 1830

Spring基础——SpringMVC概述

SpringMVC的介绍

NoBugNoLife的博客 1128

EL&JSTL

一、EL表达式 1. 概念:Expression Language 表达式语言 2. 作用:替换和简化jsp页面中java代码的编写 3. 语法:${表达式} 4. 注意: * jsp默认支持el表达式的。如果要忽略el表达式 1. 设置jsp中page指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式 2. \${表达式} ...

胖大海的博客 301

MVC开发模式详解

MVC设计模式详解 1.Model-View-Controller(模型-视图-控制器)    MVC设计模式实际上强制性地将程序的输入、处理、和输出分开。    Model-View-Controller实际上担当着不同的角色。    Model:代表着业务数据和业务逻辑处理,(主要包括业务逻辑模块(web项目中的dao类)和数据模块(model类)和JavaBean相同,由Model

一只不懈努力的程序猿,通过代码实验洞悉技术的本质。 1万+

MVC模式介绍

完全理解MVC模式并不是很容易的。使用MVC模式需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考软件的架构。同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。

liitdar的博客 11万+

MVVM和MCV模式

MVVM MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。微软的WPF带来了新的技术体验,如Silverlight、音频、视频、3D、动画……,这导致了软件UI层更加细节化、可定制化。同时,在技术层面,WPF也带来了 诸如Binding、Depe

小菜鸡 1396
上一篇: 程序员跳槽之各行业目前现状对比
下一篇: UML类图几种关系的总结
leaderYU
博客等级 码龄15年 22粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值