JDK提供了观察者模式的实现类java.util.Observer,java.util.Observable.
java.util.Observer为观察者。
java.util.Observable观察物。

1.观察物

Java代码 复制代码 收藏代码
  1. package observer;
  2. import java.util.Observable;
  3. public class Publisher extends Observable {
  4. private String magazineName;
  5. public String getMagazineName() {
  6. return magazineName;
  7. }
  8. public void publish(String magazineName) {
  9. this.magazineName = magazineName;
  10. setChanged();// set the changed signal
  11. notifyObservers();// notify all the observers
  12. }
  13. }
package observer;
import java.util.Observable;
public class Publisher extends Observable {
	private String magazineName;
	public String getMagazineName() {
		return magazineName;
	}
	public void publish(String magazineName) {
		this.magazineName = magazineName;
		setChanged();// set the changed signal
		notifyObservers();// notify all the observers
	}
}


2.观察者

Java代码 复制代码 收藏代码
  1. package observer;
  2. import java.util.Observable;
  3. import java.util.Observer;
  4. public class Reader implements Observer {
  5. // when the observable changed ,
  6. // it will notify all the observers and this method will be invoke
  7. @Override
  8. public void update(Observable o, Object arg) {
  9. if(o instanceof Publisher){
  10. Publisher p = (Publisher) o;
  11. System.out.println("i want to read magazine. " + p.getMagazineName());
  12. }
  13. }
  14. }
package observer;
import java.util.Observable;
import java.util.Observer;
public class Reader implements Observer {
	// when the observable changed , 
	// it will notify all the observers and this method will be invoke
	@Override
	public void update(Observable o, Object arg) {
		if(o instanceof Publisher){
			Publisher p = (Publisher) o;
			System.out.println("i want to read magazine. " + p.getMagazineName());
		}
	}
}


3.测试类

Java代码 复制代码 收藏代码
  1. package observer;
  2. public class Main {
  3. public static void main(String[] args) {
  4. // create observer
  5. Reader reader=new Reader();
  6. // create observable
  7. Publisher publisher = new Publisher();
  8. // add observer
  9. publisher.addObserver(reader);
  10. // observable do some action
  11. publisher.publish("I am antlove.");
  12. }
  13. }