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);
}
}
分享到:
相关推荐
MVC实例!初学者可以看看!MVC实例!MVC案例!
应该足够 目前这个小型项目还会进一步完善 目前开发了两天 先把demo和大家共享下 api在工程doc文件夹中 已经使用javadoc打包好 有疑问的可以联系我">哈哈 自己开发的一个小型mvc 大家可以下载看看 使用的技术:...
里面有详细的说明文档,弄了一个word给大家看,简单在这介绍一下 安装顺序如下: AspNetMVC3Setup.exe AspNetMVC3Setup_CHS.exe AspNetMVC3ToolsUpdateSetup.exe AspNetMVC3ToolsUpdateSetup_CHS.exe
用MVC结构+ORACLE 做得 比较简单 初学者可以看看
mvc模式的贪吃蛇,简单容易理解,可以下来看看
ASP.NET MVC4,全英文的教程,大家英语好的可以原汁原味的看看
MVC开发模式详解,介绍MVC开发模式详解,看看。
前台使用MVC3+JQ+JS,后台使用MVC3+EXTJS实现 视图使用MVC3最新视图引擎RAZOR
时钟的MVC例子(适合初学MVC的人看)
几张图看明白MVC、MVP、MVVM, 希望对各位有帮助
管理后台有用户管理、角色管理、邮件配置等功能 花了五天时间,终于做好了asp.net mvc后台管理系统,但...解决了mvc传递中文字符的问题 DB_51aspx下为Sql2005数据库,附加即可 默认管理员帐号/密码:qiaojun/123456
asp.net MVC 源码 需要的朋友可以下载看看了
mvc3基本知识,翻译的一本书,不过没有翻译完,新手看看还是不错的,sportstore里卖的例子
MVC 项目模板源码 此源代码非常适合新人理解并学习MVC的开发模式,本人将此源代码做了一遍,受益不少,有想学习MVC的朋友可以下载来看看
界面看起来简单,但其中融合了MVC的思想,另外还使用了Struts和Hibernate两个开源框架技术,是有ajax的实现
在ASP.NET MVC框架中没有了自己的控件,页面显示完全就回到了写html代码的年代。还好在asp.net mvc框架中也有自带的HtmlHelper和UrlHelper两个...先来看看HtmlHelper能帮我们生成一些什么样的html呢。直接看效果吧。
自己写的分页控件,在 ...同时支持MVC2 MVC3并有简单sample.非常简单。我相信大部分人能看懂我的sample 使用: 1、引用我的DLL 2、自己要坐分页的Model继承至 INetMvcPage 3、在页面上 @...有什么BUG欢迎提出。
对于MVC初学者可以看里面的MVC2.0. 有经验的可以学习MVC3.0. 再者可以看看插件 ORM关于NHibernate的使用.文件写的狠详细,包括要添加的库文件我都包装好了.学习者绝对实用.
asp.net博客系统,采用 Mvc三层架构,大家试试看看啊
PureMVC实现与实践——教程....不错的pdf讲解的挺详细,大家下来看看。 PureMVC实现与实践——教程.pdf 不错的pdf讲解的挺详细,大家下来看看。 PureMVC实现与实践——教程.pdf 不错的pdf讲解的挺详细,大家下来看看。