Java设计模式之观察者模式

转载 2015年11月19日 10:50:51

观察者模式很好理解,类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时,经常会看到RSS图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。


一个Observer接口:

  1. public interface Observer {  
  2.     public void update();  
  3. }  

两个实现类:

  1. public class Observer1 implements Observer {  
  2.    @Override  
  3.     public void update() {  
  4.         System.out.println("observer1 has received!");  
  5.     }  
  6. }  
  1. public class Observer2 implements Observer {  
  2.   
  3.     @Override  
  4.     public void update() {  
  5.         System.out.println("observer2 has received!");  
  6.     }  
  7.   
  8. }  

Subject接口及实现类:

  1. public interface Subject {  
  2.       
  3.     /*增加观察者*/  
  4.     public void add(Observer observer);  
  5.       
  6.     /*删除观察者*/  
  7.     public void del(Observer observer);  
  8.       
  9.     /*通知所有的观察者*/  
  10.     public void notifyObservers();  
  11.       
  12.     /*自身的操作*/  
  13.     public void operation();  
  14. }  
  1. public abstract class AbstractSubject implements Subject {  
  2.   
  3.     private Vector<Observer> vector = new Vector<Observer>();  
  4.     @Override  
  5.     public void add(Observer observer) {  
  6.         vector.add(observer);  
  7.     }  
  8.   
  9.     @Override  
  10.     public void del(Observer observer) {  
  11.         vector.remove(observer);  
  12.     }  
  13.   
  14.     @Override  
  15.     public void notifyObservers() {  
  16.         Enumeration<Observer> enumo = vector.elements();  
  17.         while(enumo.hasMoreElements()){  
  18.             enumo.nextElement().update();  
  19.         }  
  20.     }  
  21. }  
  1. public class MySubject extends AbstractSubject {  
  2.   
  3.     @Override  
  4.     public void operation() {  
  5.         System.out.println("update self!");  
  6.         notifyObservers();  
  7.     }  
  8.   
  9. }  


测试类:

  1. public class ObserverTest {  
  2.   
  3.     public static void main(String[] args) {  
  4.         Subject sub = new MySubject();  
  5.         sub.add(new Observer1());  
  6.         sub.add(new Observer2());  
  7.           
  8.         sub.operation();  
  9.     }  
  10.   
  11. }  

输出:

update self!
observer1 has received!
observer2 has received!


Java设计模式之观察者模式

本文继续介绍23种设计模式系列。介绍的是观察者模式。
  • jason0539
  • jason0539
  • 2015年04月16日 07:32
  • 29825

班主任来啦之观察者模式,事件委托等Java实现---如果你还不懂,看完此文,就一定会懂

班主任来啦! 小A对小B说:“今天真是笑死人了,我们班一位同学在仔细的时候看NBA球赛,被班主任抓了个正着。班主任脸都绿了,哈哈,真是笑死我了。 小B说:”啊,你们怎么同学怎么敢在课上看电视啊?“ ...
  • XIAXIA__
  • XIAXIA__
  • 2014年12月08日 15:42
  • 2481

设计模式之观察者模式与事件委托

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自己更新自己。         观察者结构模式图:     ...
  • wangdan199112
  • wangdan199112
  • 2014年02月16日 21:36
  • 2256

java设计模式系列之观察者模式代码

  • 2016年10月13日 16:42
  • 2KB
  • 下载

设计模式:观察者模式java和javabean

  • 2013年12月07日 10:27
  • 3KB
  • 下载

Java 设计模式-观察者模式(Observer)

  • 2016年05月13日 20:11
  • 16KB
  • 下载

设计模式--观察者模式java例子

  • 2017年02月06日 17:18
  • 43KB
  • 下载

java23种设计模式之观察者模式

  • 2011年05月20日 14:10
  • 3KB
  • 下载

java设计模式之观察者模式

  • 2013年11月05日 14:25
  • 7KB
  • 下载

Java设计模式——观察者模式

  • 2015年05月04日 17:40
  • 22KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java设计模式之观察者模式
举报原因:
原因补充:

(最多只允许输入30个字)