用观察者模式实现MVC框架!
写的不错!
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 { // 刪除Observer13 observers.remove(observer);14 }15 public void notifyObservers() 16 { // 通知Observer17 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的状态。
以上是观察者模式。