博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC和观察者模式
阅读量:6947 次
发布时间:2019-06-27

本文共 2831 字,大约阅读时间需要 9 分钟。

用观察者模式实现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 }
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     { // 刪除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 }
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的状态。

以上是观察者模式。

 

转载于:https://www.cnblogs.com/yhlx125/p/3270788.html

你可能感兴趣的文章
Android监听手机网络变化
查看>>
ES6基础-解构赋值
查看>>
html转义字符
查看>>
C++ 简单的日志类
查看>>
Linux /proc目录详解
查看>>
VirtualBox不显示64bit版本的iso
查看>>
架构阅读笔记15
查看>>
关于setInterval
查看>>
Java学习之路(一)
查看>>
vim缩进
查看>>
UVA 10837 A Research Problem
查看>>
NOIP模拟2
查看>>
Todolist组件
查看>>
java自定义注解
查看>>
选择排序
查看>>
【下一代核心技术DevOps】:(六)Rancher集中存储及相关应用
查看>>
关于AFNetWorking3.0内存泄漏的问题
查看>>
出差感想
查看>>
简单的一个布局CSS+DIV
查看>>
面试时要懂得说的黄金五条
查看>>