用观察者模式实现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的状态。

以上是观察者模式。

最新文章

  1. php 上传大文件配置upload_max_filesize和post_max_size选项
  2. AngularJS 深入理解 $scope
  3. DP:Apple Catching(POJ 2385)
  4. ubuntu下python3安装scrapy,OpenSSL
  5. python yield 理解
  6. 持续更新visual studio 命令、快捷键(原创)
  7. docker的网络-Container network interface(CNI)与Container network model(CNM)
  8. ES6常用语法整合
  9. 在应用中更新App版本号
  10. Java进阶篇(一)——接口、继承与多态
  11. 人工智能初识(百度ai)
  12. POJ 1979 红与黑
  13. python 序列化模块之 json 和 pickle
  14. maven jdk 版本配置
  15. 利用unittest+ddt进行接口测试(二):使用yaml文件管理测试数据
  16. python学习 day15 (3月20日)----time
  17. 看图说说Sun HotSpot虚拟机对象
  18. GNU C编译器的gnu11和c11
  19. jquery文档加载几种写法,图片加载写法
  20. Python+selenium之读取配置文件内容

热门文章

  1. UGUI之Canvas Group
  2. linux系统中,tee命令的使用
  3. [ExtJs] ExtJs4.2 数据模型Ext.data.Model学习
  4. Effective C++ Item 15 Provide access to raw resources in resource-managing classes
  5. linux系统socket通信编程1
  6. ios学习--TableView详细解释
  7. 《C++ Primer Plus》第14章 C++中的代码重用 学习笔记
  8. Extjs6.2.0搭建项目框架
  9. IT English Collection(20) of Object modeling
  10. [HNOI2004] 打砖块