`
lianggl2008
  • 浏览: 25588 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

观察者模式

阅读更多
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();

	}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics