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 }
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 }
调用:
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的状态。
以上是观察者模式。
作者:太一吾鱼水
文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。
欢迎大家留言交流,转载请注明出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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保姆级教程