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例子

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

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

观察者模式,书中的定义为“观察者模式定义了对象之间的一对多依赖,这样依赖,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新”。书中给出了一个气象站的实例,气象数据类的代码如下: 其中3...
  • laukaka
  • laukaka
  • 2012年06月20日 18:07
  • 568

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

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

java设计模式之观察者模式

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

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

观察者模式 Observer 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己。 ...
  • jwc2436
  • jwc2436
  • 2015年12月18日 17:50
  • 250

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

观察者模式定义:定义了对象之间的一对多的依赖,这样一来,当一个对象发生改变状态的时候,它的所有依赖者都会收到通知并自动更新。参考如下图: 观察者设计模式也叫发布-订阅模式。 也可以称作:出版者+订...

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

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

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