用观察者模式实现MVC框架!

http://wenku.baidu.com/view/eff8bab069dc5022aaea0007.html

写的不错!

Observer和ConcreteObserver,观察者


MVC和观察者模式_i++MVC和观察者模式_git_02


1 public interface Observer
2 {
3 public abstract void update(NumberGenerator generator);
4 }
5 public class DigitObserver implements Observer
6 {
7 public void update(NumberGenerator generator)
8 {
9 System.out.println("DigitObserver:" + generator.getNumber());
10 try
11 {
12 Thread.sleep(100);
13 }
14 catch (InterruptedException e)
15 {
16 }
17 }
18 }
19
20 public class GraphObserver implements Observer
21 {
22 public void update(NumberGenerator generator)
23 {
24 System.out.print("GraphObserver:");
25 int count = generator.getNumber();
26 for (int i = 0; i < count; i++)
27 {
28 System.out.print("*");
29 }
30 System.out.println("");
31 try
32 {
33 Thread.sleep(100);
34 }
35 catch (InterruptedException e)
36 {
37 }
38 }
39 }

View Code

  Subject、ConcreteSubject被观察者


MVC和观察者模式_i++MVC和观察者模式_git_02


1 import java.util.Vector;
2 import java.util.Iterator;
3
4 public abstract class NumberGenerator
5 {
6 private Vector observers = new Vector(); // 储存Observer
7 public void addObserver(Observer observer)
8 { // 新增Observer
9 observers.add(observer);
10 }
11 public void deleteObserver(Observer observer)
12 { // 刪除Observer
13 observers.remove(observer);
14 }
15 public void notifyObservers()
16 { // 通知Observer
17 Iterator it = observers.iterator();
18 while (it.hasNext())
19 {
20 Observer o = (Observer)it.next();
21 o.update(this);
22 }
23 }
24 public abstract int getNumber(); // 取得数值
25 public abstract void execute(); // 产生数值
26 }
27 import java.util.Random;
28
29 public class RandomNumberGenerator extends NumberGenerator
30 {
31 private Random random = new Random(); // 随机数生成器
32 private int number; // 目前数值
33 public int getNumber()
34 { // 取得数值
35 return number;
36 }
37 public void execute()
38 {
39 for (int i = 0; i < 20; i++)
40 {
41 number = random.nextInt(50);
42 notifyObservers();
43 }
44 }
45 }

View Code

调用:



1 public class Main 
2 {
3 public static void main(String[] args)
4 {
5 NumberGenerator generator = new RandomNumberGenerator();
6 Observer observer1 = new DigitObserver();
7 Observer observer2 = new GraphObserver();
8 generator.addObserver(observer1);
9 generator.addObserver(observer2);
10 generator.execute();
11 }
12 }


将观察者Observer添加给被观察者Subject,被观察者Subject更新观察者Observer的状态。

以上是观察者模式。