代码实现:
public interface Observer {
void update(Subject subject);
}
public class Subject {
protected List<Observer> list = new ArrayList<Observer>();
public void registe(Observer observer){
list.add(observer);
}
public void removeobj(Observer observer){
list.remove(observer);
}
public void notifyAllObs(){
for (Observer obs : list) {
obs.update(this);
}
}
}
public class ConcreteSubject extends Subject{
private int state;
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
//主题对象(目标对象)值发生变化,请通知所有的观察者
this.notifyAllObs();
}
}
public class ObserverA implements Observer{
private int myState; //mystate需要跟目标的state值保持一致
@Override
public void update(Subject subject) {
myState = ((ConcreteSubject)subject).getState();
}
public int getMyState() {
return myState;
}
public void setMyState(int myState) {
this.myState = myState;
}
}
public class Test {
public static void main(String[] args) {
ConcreteSubject subject = new ConcreteSubject();
//创建多个观察者
ObserverA ob1 = new ObserverA();
ObserverA ob2 = new ObserverA();
ObserverA ob3 = new ObserverA();
//将三个观察者加入到subject对象的观察者队伍中
subject.registe(ob1);
subject.registe(ob2);
subject.registe(ob3);
//改变subject的状态
subject.setState(3000);
//观察观察者的状态值
System.out.println(ob1.getMyState());
System.out.println(ob2.getMyState());
System.out.println(ob3.getMyState());
}
}