package mvc;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
interface ModelInterface {
void on();
void stop();
void setData();
String getData();
void changeState();
void register(EasyObserver o);
void notifyObservers();
}
interface ControllerInterface {
void start();
void stop();
void changeState();
}
interface EasyObserver {
void update();
}
class View extends JFrame implements ActionListener, EasyObserver {
/**
*
*/
private static final long serialVersionUID = 1L;
private ControllerInterface controller;
private ModelInterface model;
private final JTextField text = new JTextField();
private final JButton button = new JButton("Start");
private void init() {
this.setLocation(200, 200);
button.addActionListener(this);
text.setForeground(Color.RED);
text.setEnabled(false);
Container c = this.getContentPane();
c.setLayout(new BorderLayout());
c.add(text, BorderLayout.CENTER);
c.add(button, BorderLayout.SOUTH);
this.pack();
this.setResizable(false);
this.setVisible(true);
}
public View(ControllerInterface controller, ModelInterface model) {
super("MVC");
this.controller = controller;
this.model = model;
model.register(this);
this.controller.start();
init();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void changeState() {
if (button.getText().equals("Start"))
button.setText("Stop");
else
button.setText("Start");
controller.changeState();
}
public void actionPerformed(ActionEvent e) {
changeState();
}
public void update() {
text.setText(model.getData());
}
}
class Controller implements ControllerInterface {
private ModelInterface model;
public Controller(ModelInterface model) {
this.model = model;
}
public void start() {
model.on();
}
public void stop() {
model.stop();
}
public void changeState() {
model.changeState();
}
}
class Model extends Thread implements ModelInterface {
private final Random random = new Random();
ArrayList<EasyObserver> observers = new ArrayList<EasyObserver>();
private volatile boolean isTrue = true;
Object locker = new Object();
public Model() {
}
public void on() {
start();
}
public void run() {
while (true) {
try {
synchronized (this) {
while(isTrue) {
wait();
}
notifyObservers();
}
} catch (InterruptedException e) {
}
}
}
public String getData() {
return new Integer(Math.abs(random.nextInt())).toString();
}
public void register(EasyObserver t) {
observers.add(t);
}
public void setData() {
}
public synchronized void changeState() {
if (isTrue == true)
notify();
isTrue = !isTrue;
}
public void notifyObservers() {
for (EasyObserver o : observers) {
o.update();
}
}
}
public class MVC {
public static void main(String[] args) {
ModelInterface model = new Model();
ControllerInterface controller = new Controller(model);
new View(controller, model);
}
}
分享到:
相关推荐
应该足够 目前这个小型项目还会进一步完善 目前开发了两天 先把demo和大家共享下 api在工程doc文件夹中 已经使用javadoc打包好 有疑问的可以联系我">哈哈 自己开发的一个小型mvc 大家可以下载看看 使用的技术:...
在`Mvcdemo`实例中,可能会有`UserProfileView`或`LoginPageView`等视图文件,它们负责渲染用户界面,并将数据从模型中传递到用户界面上。 **3. Controller(控制器)** 控制器作为模型和视图之间的桥梁,处理用户...
里面有详细的说明文档,弄了一个word给大家看,简单在这介绍一下 安装顺序如下: AspNetMVC3Setup.exe AspNetMVC3Setup_CHS.exe AspNetMVC3ToolsUpdateSetup.exe AspNetMVC3ToolsUpdateSetup_CHS.exe
标题"MVC购物车用MVC结构+ORACLE做得比较简单 初学者可以看看"表明这是一个关于使用Model-View-Controller(MVC)架构和Oracle数据库开发的简单购物车应用的教程,适合初级学习者。描述中的"用MVC结构+ORACLE做得...
"NIIT mvc4 请看清楚在下载" 这个标题提到了 "mvc4",这是对Microsoft ASP.NET MVC框架第四版的简称,它是一个用于构建动态网站的应用程序开发框架。NIIT(National Institute of Information Technology)可能是一...
这种结构有助于保持代码的清晰和可维护性。 首先,让我们深入了解一下MVC3。MVC3是微软ASP.NET MVC框架的一个版本,它在2011年发布,提供了许多新特性和改进,包括对Razor视图引擎的支持,增强了测试驱动开发(TDD...
接下来,我们来看看x64和x86版本的System.Mvc.dll。这两个版本分别对应不同的处理器架构。x86版本适用于32位系统,而x64版本则是为64位系统设计的。选择正确的版本至关重要,因为错误的版本可能会导致应用程序无法...
接下来,我们来看看如何开始创建一个ASP.NET MVC项目: 1. **新建项目**:在Visual Studio中,选择“文件”->“新建”->“项目”,然后选择ASP.NET MVC 2.0模板。 2. **添加控制器**:在解决方案资源管理器中,...
管理后台有用户管理、角色管理、邮件配置等功能 花了五天时间,终于做好了asp.net mvc后台管理系统,但...解决了mvc传递中文字符的问题 DB_51aspx下为Sql2005数据库,附加即可 默认管理员帐号/密码:qiaojun/123456
现在,我们来看看"MyFirstPureMvc"项目中的具体实现: 1. **初始化**:项目启动时,通常会有一个主控制器`MainController`,它负责注册初始的命令,以便处理应用程序的启动流程。 2. **命令(Commands)**:项目中...
描述中提到,“自己写的小例子,希望大家可以看得明白”,意味着这是一个个人创建的项目,旨在帮助学习者理解如何在实际项目中应用PureMVC框架。此外,它特别指出例子使用了BlazeDS,这是一个由Adobe提供的开源...
接着,让我们来看看注解的使用。在Spring MVC中,注解大大简化了配置过程。例如,`@Controller`注解标识一个类作为控制器,`@RequestMapping`用于映射HTTP请求到特定的方法,`@GetMapping`和`@PostMapping`分别处理...
虽然描述部分提供的信息较为重复,但从标题和标签来看,很明显本书旨在深入讲解ASP.NET MVC框架的相关技术和实践。 ### ASP.NET MVC 概述 ASP.NET MVC 是一个开源的Web应用程序框架,它基于模型-视图-控制器...
自己写的分页控件,在 ...同时支持MVC2 MVC3并有简单sample.非常简单。我相信大部分人能看懂我的sample 使用: 1、引用我的DLL 2、自己要坐分页的Model继承至 INetMvcPage 3、在页面上 @...有什么BUG欢迎提出。
根据提供的文件信息,我们可以深入探讨MVC(Model-View-Controller)架构模式的相关知识点,以及该模式在软件开发中的应用。 ### MVC架构模式简介 MVC是一种常用的软件设计模式,主要用于构建用户界面。它将应用...
其他可能的文件可能包括语言包、文档、示例代码等,这些都有助于学习和使用ASP.NET MVC4.0。 总的来说,ASP.NET MVC4.0是一个强大且灵活的Web开发框架,它提供了丰富的功能和工具,帮助开发者构建高性能、可扩展的...
MVC、MVP和MVVM是三种常见的软件架构设计模式,它们主要用于分离用户界面(UI)与业务逻辑,以提高代码的可维护性和可测试性。下面将详细地介绍这三种模式的工作原理、组成部分以及它们之间的异同。 **MVC(Model-...
将MVC应用于WinForms可能看起来不寻常,但通过这种方式,我们可以增强代码的可测试性和可维护性。以下是对"winform-mvc例子"项目中可能涉及的知识点的详细解释: 1. **MVC模式**: MVC模式是软件设计中的一种结构...
NFine-MVC快速开发框架是基于C#.NET平台,利用ASP.NET MVC技术、Entity Framework 6(EF6)以及Bootstrap前端框架构建的一款高效能、高效率的开发工具。这款框架旨在减少开发过程中重复的工作量,提升开发效率,帮助...
在这个分页场景中,模型负责数据的获取和处理,控制器处理用户请求并传递数据到视图,视图则展示给用户看。 1. **分页概念**:分页是将大量数据分成小块,以便用户可以逐页查看,提高网页加载速度和用户体验。通常...