zoukankan      html  css  js  c++  java
  • 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的状态。

    以上是观察者模式。

  • 相关阅读:
    SSH移植
    ARM PPC 交叉编译环境搭建
    CEOI2020 作战记录&题解
    [NOI2019]序列 题解
    Atcoder Dwango Programming Contest 6th 题解
    CF516D Drazil and Morning Exercise 题解
    CF568E Longest Increasing Subsequence 题解
    [IOI2013]robots 题解
    SPOJ22549 DIVFACT4
    CF590E Birthday 题解
  • 原文地址:https://www.cnblogs.com/yhlx125/p/3270788.html
Copyright © 2011-2022 走看看