MVC和观察者模式
2024-09-22 00:26:59
用观察者模式实现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的状态。
以上是观察者模式。
最新文章
- php 上传大文件配置upload_max_filesize和post_max_size选项
- AngularJS 深入理解 $scope
- DP:Apple Catching(POJ 2385)
- ubuntu下python3安装scrapy,OpenSSL
- python yield 理解
- 持续更新visual studio 命令、快捷键(原创)
- docker的网络-Container network interface(CNI)与Container network model(CNM)
- ES6常用语法整合
- 在应用中更新App版本号
- Java进阶篇(一)——接口、继承与多态
- 人工智能初识(百度ai)
- POJ 1979 红与黑
- python 序列化模块之 json 和 pickle
- maven jdk 版本配置
- 利用unittest+ddt进行接口测试(二):使用yaml文件管理测试数据
- python学习 day15 (3月20日)----time
- 看图说说Sun HotSpot虚拟机对象
- GNU C编译器的gnu11和c11
- jquery文档加载几种写法,图片加载写法
- Python+selenium之读取配置文件内容
热门文章
- UGUI之Canvas Group
- linux系统中,tee命令的使用
- [ExtJs] ExtJs4.2 数据模型Ext.data.Model学习
- Effective C++ Item 15 Provide access to raw resources in resource-managing classes
- linux系统socket通信编程1
- ios学习--TableView详细解释
- 《C++ Primer Plus》第14章 C++中的代码重用 学习笔记
- Extjs6.2.0搭建项目框架
- IT English Collection(20) of Object modeling
- [HNOI2004] 打砖块