MVC和观察者模式

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

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

写的不错!

Observer和ConcreteObserver,观察者

 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被观察者

 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的状态。

以上是观察者模式。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值