Java_观察者模式(Observable和Observer)
2017-07-24 18:36
344 查看
参考链接: http://blog.csdn.net/tianjf0514/article/details/7475164/参考链接:https://my.oschina.net/bairrfhoinn/blog/177173?p={{currentPage+1}}在Java中通过Observable类和Observer接口实现了观察者模式。一个Observer对象监视着一个Observable对象的变化,当Observable对象发生变化时,Observer得到通知,就可以进行相应的工作。如果画面A是显示数据库里面的数据,而画面B修改了数据库里面的数据,那么这时候画面A就要重新Load。这时候就可以用到观察者模式。SimpleObservable
package com.eastcom.first.spark.data.observer; import java.util.Observable; public class SimpleObservable extends Observable { private int data = 0; public int getData() { return data; } public void setData(int i) { if (this.data != i) { this.data = i; setChanged(); // 只有在setChange()被调用后,notifyObservers()才会去调用update(),否则什么都不干。 notifyObservers(); } } }SimpleObserver
package com.eastcom.first.spark.data.observer; import java.util.Observable; import java.util.Observer; public class SimpleObserver implements Observer { public SimpleObserver(SimpleObservable simpleObservable) { simpleObservable.addObserver(this); } @Override public void update(Observable o, Object data) { // TODO Auto-generated method stub System.out.println("Data has changed to" + ((SimpleObservable) o).getData()); } }SimpleTest
package com.eastcom.first.spark.data.observer; public class SimpleTest { public static void main(String[] args) { SimpleObservable doc = new SimpleObservable(); SimpleObserver view1 = new SimpleObserver(doc); SimpleObserver view2 = new SimpleObserver(doc); SimpleObserver view3 = new SimpleObserver(doc); doc.setData(1); doc.setData(2); doc.setData(2); doc.setData(3); doc.deleteObserver(view2); System.out.println("==================="); doc.setData(1); doc.setData(2); doc.setData(2); doc.setData(3); } }运行结果
Data has changed to1 Data has changed to1 Data has changed to1 Data has changed to2 Data has changed to2 Data has changed to2 Data has changed to3 Data has changed to3 Data has changed to3 =================== Data has changed to1 Data has changed to1 Data has changed to2 Data has changed to2 Data has changed to3 Data has changed to3对应一个类,既是观察者同时也是被观察者。具体实例如下:ObserverApackage com.eastcom.first.spark.data.observer;import java.util.Observable;import java.util.Observer;public class ObserverA extends Observable implements Observer {@Overridepublic void update(Observable o, Object arg) {// TODO Auto-generated method stubObserverB observerB = (ObserverB) o;System.out.println("observerB changed, the new value of observerB.data is " + observerB.data);this.setChanged();this.notifyObservers();}}ObserverBpackage com.eastcom.first.spark.data.observer;import java.util.Observable;import java.util.Observer;public class ObserverB extends Observable implements Observer {int data = 0;@Overridepublic void update(Observable object, Object arg) {System.out.println("ObserverB found that ObserverA changed...");}public void setData(int data) {this.data = data;this.setChanged();this.notifyObservers();}}ObserverClientpackage com.eastcom.first.spark.data.observer;public class ObserverClient {public static void main(String[] args) {ObserverA a = new ObserverA();ObserverB b = new ObserverB();a.addObserver(b);b.addObserver(a);b.setData(2);}}运行结果:observerB changed, the new value of observerB.data is 2ObserverB found that ObserverA changed...
相关文章推荐
- Java 语言使用 Observer/Observable 实现简单的观察者模式
- 25、java中观察者模式Observable和Observer
- Java 语言使用 Observer/Observable 实现简单的观察者模式
- Rx_java(2) 使用java中的类(Observable与Observer)实现观察者模式
- java中观察者模式Observable和Observer
- [置顶] Java Observer与Observable实现观察者模式
- Java_观察者模式(Observable和Observer)
- Java观察者模式 : Observer / Observable
- Java观察者模式 java.util.Observable 与 java.util.Observer 的理解
- Java_观察者模式(Observable和Observer)
- java 观察者模式Observable Observer
- Java_观察者模式(Observable和Observer)
- Java观察者模式 Observable Observer [U01]
- Java对观察者模式的支持——Observer和ObServable的使用
- Java观察者模式 java.util.Observable 与 java.util.Observer 的理解
- Java_观察者模式(Observable和Observer)
- Java基础之Observable与Observer接口观察者模式
- Java观察者模式 java.util.Observable 与 java.util.Observer 的理解
- Java_观察者模式(Observable和Observer) -转
- java: 观察者模式:Observable被观察者,Observer观察者