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

以上是观察者模式。

 

posted @   太一吾鱼水  阅读(1689)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示