public abstract class NumberGenerator {
public Vector<Observer> observers = new Vector<Observer>();// 所有观察者信息将录入observers中
public void addObserver(Observer observer) {
observers.add(observer);
}
public void deleteObserver(Observer observer) {
observers.remove(observer);
}
public void notifyObservers() {
Iterator it = observers.iterator();
while (it.hasNext()) {
Observer o = (Observer) it.next();
o.update(this);
}
}
public abstract int getNumber();// 获取数值
public abstract void execute();// 产生数值
}
public class RandomNumberGenerator extends NumberGenerator {
private Random random = new Random();// 产生随机数的对象
private int number;// 当前产生的数值
@Override
public void execute() {
// TODO Auto-generated method stub
for (int i = 0; i < 15; i++) {
number = random.nextInt(30);
notifyObservers();
}
}
@Override
public int getNumber() {
// TODO Auto-generated method stub
return number;
}
}
public interface Observer {
public abstract void update(NumberGenerator generator);
}
public class DigitObserver implements Observer {
public void update(NumberGenerator generator) {
// TODO Auto-generated method stub
System.out.println("数值观察者输出:"+generator.getNumber());
try{
Thread.sleep(100);//输出后暂停100毫秒
}
catch(InterruptedException ex)
{
ex.printStackTrace();
}
}
}
public class GraphObserver implements Observer {
public void update(NumberGenerator generator) {
// TODO Auto-generated method stub
System.out.print("图案观察者输出:");
int count=generator.getNumber();
for(int i=0;i<count;i++)
{
System.out.print("*");//以*号图案输出观察到的数值,*号个数表示数值大小
}
System.out.println();
try{
Thread.sleep(100);//输出后暂停100毫秒
}
catch(InterruptedException ex)
{
ex.printStackTrace();
}
}
}
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
NumberGenerator generator = new RandomNumberGenerator();
Observer observer1 = new DigitObserver();
Observer observer2 = new GraphObserver();
generator.addObserver(observer1);
generator.addObserver(observer2);
generator.execute();
}
}
分享到:
相关推荐
Qt设计模式之观察者模式
采用Java语言编写的一个观察者模式实例。观察者模式(有时又被称为模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,...
java观察者模式观察者模式java观察者模式观察者模式java观察者模式观察者模式
观察者模式及实例,适合初学者阅读 。。。。。。。。。。。。。。。
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件...
Java 观察者模式的浅析 简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象。这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者...
观察者模式
java 设计模式 观察者模式 简单实例 包括测试test类
观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化,这个例子是java内置观察者模式
设计模式之观察者模式Java版本实现和UML类设计图
设计模式-观察者模式(讲解及其实现代码)
设计模式--观察者模式java例子
运用观察者模式及MVC模式的整合,是javaWeb的简单的实现了选民投票
观察者模式Demo,设计模式,观察者模式
观察者模式使用
iOS 设计模式 观察者模式
观察者模式小型框架
56丨观察者模式(上):详解各种应用场景下观察者模式的不同实现方式1