MVC和观察者模式
用观察者模式实现MVC框架!
http://wenku.baidu.com/view/eff8bab069dc5022aaea0007.html
写的不错!
Observer和ConcreteObserver,观察者
public interface Observer
{
public abstract void update(NumberGenerator generator);
}
public class DigitObserver implements Observer
{
public void update(NumberGenerator generator)
{
System.out.println("DigitObserver:" + generator.getNumber());
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
}
}
} public class GraphObserver implements Observer
{
public void update(NumberGenerator generator)
{
System.out.print("GraphObserver:");
int count = generator.getNumber();
for (int i = 0; i < count; i++)
{
System.out.print("*");
}
System.out.println("");
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
}
}
}
Subject、ConcreteSubject被观察者
import java.util.Vector;
import java.util.Iterator; public abstract class NumberGenerator
{
private Vector observers = new Vector(); // 储存Observer
public void addObserver(Observer observer)
{ // 新增Observer
observers.add(observer);
}
public void deleteObserver(Observer observer)
{ // 刪除Observer
observers.remove(observer);
}
public void notifyObservers()
{ // 通知Observer
Iterator it = observers.iterator();
while (it.hasNext())
{
Observer o = (Observer)it.next();
o.update(this);
}
}
public abstract int getNumber(); // 取得数值
public abstract void execute(); // 产生数值
}
import java.util.Random; public class RandomNumberGenerator extends NumberGenerator
{
private Random random = new Random(); // 随机数生成器
private int number; // 目前数值
public int getNumber()
{ // 取得数值
return number;
}
public void execute()
{
for (int i = 0; i < 20; i++)
{
number = random.nextInt(50);
notifyObservers();
}
}
}
调用:
public class Main
{
public static void main(String[] args)
{
NumberGenerator generator = new RandomNumberGenerator();
Observer observer1 = new DigitObserver();
Observer observer2 = new GraphObserver();
generator.addObserver(observer1);
generator.addObserver(observer2);
generator.execute();
}
}
将观察者Observer添加给被观察者Subject,被观察者Subject更新观察者Observer的状态。
以上是观察者模式。
MVC和观察者模式的更多相关文章
- .Net Mvc过滤器观察者模式记录网站报错信息
基本介绍: 观察者模式是一种对象行为模式.它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.在观察者模式中,主题是通知的发布者,它发出通知时并不 ...
- [Head First设计模式]山西面馆中的设计模式——观察者模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 引言 不知不自觉又将设计模式融入生活了,吃个饭也不得安生,也发现生活中的很多场景,都可以用设计模式来模拟.原来设计模式就在 ...
- 30行代码实现Javascript中的MVC
从09年左右开始,MVC逐渐在前端领域大放异彩,并终于在刚刚过去的2015年随着React Native的推出而迎来大爆发:AngularJS.EmberJS.Backbone.ReactJS.Rio ...
- 为什么23种设计模式没有 MVC
MVC的是为了把数据(Model)和视图(View)分离开来,然后用控制器(Controller)来粘合M和V之间的关系. MVC是观察者模式(Observer), 策略模式(Strategy)和组合 ...
- 30 行代码实现 JS 中的 MVC
一连串的名字走马观花式的出现和更迭,它们中一些已经渐渐淡出了大家的视野,一些还在迅速茁壮成长,一些则已经在特定的生态环境中独当一面舍我其谁.但不论如何,MVC已经并将持续深刻地影响前端工程师们的思维方 ...
- 【zz】史上最全设计模式导学目录(完整版)
2012年-2013年,Sunny在CSDN技术博客中陆续发表了100多篇与设计模式学习相关的文章,涵盖了七个面向对象设计原则和24个设计模式(23个GoF设计模式 + 简单工厂模式),为了方便大家 ...
- DP:***24种设计模式--转自刘伟
转自于高人的文章:http://blog.csdn.net/lovelion/article/details/17517213 2012年-2013年,Sunny在CSDN技术博客中陆续发表了100多 ...
- [Design Patterns] 03. Behavioral Patterns - Observer Pattern
前言 参考资源 Ref: 史上最全设计模式导学目录(完整版) 观察者模式-Observer Pattern[学习难度:★★★☆☆,使用频率:★★★★★] 对象间的联动——观察者模式(一):多人联机对战 ...
- iOS中常见的设计模式——单例模式\委托模式\观察者模式\MVC模式
一.单例模式 1. 什么是单例模式? 在iOS应用的生命周期中,某个类只有一个实例. 2. 单例模式解决了什么问题? 想象一下,如果我们要读取文件配置信息,那么每次要读取,我们就要创建一个文件实例,然 ...
随机推荐
- BleedTree动画混合树
通过Unity动画状态机,能帮我们轻松处理转换各个动画片断,达到想要的效果,但是如果仅仅是一个个动画的硬生生的切换,那么看起来就非常突然,而不真实了,在质量要求比较高的游戏中,特别是动作游戏,我们就不 ...
- UIScrollView的用法,属性
iOS开发学习笔记-UIScrollView的用法 转载地址:http://www.jianshu.com/p/bcaf5cdfaa7e# UIScrollView是用来在屏幕上显示那些在有限区域内放 ...
- eclipse中debug模式不能启动运行,run运行模式却能启动运行!
这个问题我郁闷了好久!问题原因:因为断点太多了,断点冲突了. 解决办法:只要进如deug界面,选择BreakPoints选项,然后清除所有断点,再重新debug启动.问题解决! 希望能帮到遇到此问题的 ...
- linux解压和压缩
1.压缩命令: 命令格式:tar -zcvf 压缩文件名.tar.gz 被压缩文件名 可先切换到当前目录下.压缩文件名和被压缩文件名都可加入路径. 2.解压缩命令: 命令格式:tar -z ...
- VS添加命令行参数main(int argc, char** argv)
- brocadcastReceiver
用来接收广播, 可以根据系统发生的一些时间做出一些处理 系统的一些事件,比如来电,来短信,等等,会发广播:可监听这些广播,并进行一些处理: Android3.2以后,为了安全起见,对于刚安装的应用,需 ...
- PyQt4颜色对话框QColorDialog
QColorDialog提供了用于显示颜色的对话框. #!/usr/bin/python # -*- coding: utf-8 -*- import sys from PyQt4 import Qt ...
- JS对象添加新的字段
var test={name:"name",age:"12"}; test.id = "12345"; 直接定义添加就成了
- Splay模板 1.0
struct Splay{ int rt,sz; ///根节点,树节点总数 ],fa[N];///值,左右儿子,父亲 void spin(int t){ ///旋转操作 ]==t; son[x][y] ...
- SpringData JPA查询分页demo
SpringData JPA 的 PagingAndSortingRepository接口已经提供了对分页的支持,查询的时候我们只需要传入一个 org.springframework.data.dom ...