测试类
public class Test {
public static void main(String[] args) {
SimpleSubject simpleSubject = new SimpleSubject();
SimpleObserver simpleObserver = new SimpleObserver(simpleSubject);
simpleSubject.setValue(80);
simpleSubject.removeObserver(simpleObserver);
}
}
观察者接口
public interface Observer {
public void update(int value);
}
观察者
public class SimpleObserver implements Observer {
private int value;
private Subject simpleSubject;
public SimpleObserver(Subject simpleSubject) {
this.simpleSubject = simpleSubject;
simpleSubject.registerObserver(this);
}
@Override
public void update(int value) {
this.value = value;
display();
}
public void display() {
System.out.println("Value: " + value);
}
}
主题
public interface Subject {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();
}
主题实现类
public class SimpleSubject implements Subject {
private List<Observer> observers;
private int value = 0;
public SimpleSubject() {
observers = new ArrayList<Observer>();
}
@Override
public void registerObserver(Observer o) {
observers.add(o);
}
@Override
public void removeObserver(Observer o) {
observers.remove(o);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(value);
}
}
public void setValue(int value) {
this.value = value;
notifyObservers();
}
}
java.util包内置api实现观察者模式
import java.util.Observable;
public class SimpleSubject extends Observable {
private int value = 0;
public SimpleSubject() { }
public void setValue(int value) {
this.value = value;
setChanged();
notifyObservers(value);
}
public int getValue() {
return this.value;
}
}
主题
import java.util.Observable;
public class SimpleSubject extends Observable {
private int value = 0;
public SimpleSubject() { }
public void setValue(int value) {
this.value = value;
setChanged();
notifyObservers(value);
}
public int getValue() {
return this.value;
}
}