package observer;
public interface Observer {
void update(Subject subject);
}
class ObserverA implements Observer{
private int mystate;//保持和目标者状态一致
@Override
public void update(Subject subject) {
// TODO Auto-generated method stub
this.mystate = ((ConcreteSubject)subject).getState();
}
public int getMystate() {
return mystate;
}
public void setMystate(int mystate) {
this.mystate = mystate;
}
}
package observer;
import java.util.ArrayList;
import java.util.List;
public class Subject {
protected List<Observer> list = new ArrayList<Observer>();
public void register(Observer observer) {
list.add(observer);
}
//通知所有观察者
public void notifyAllObserver() {
for (Observer observer : list) {
observer.update(this);
}
}
}
package observer;
public class ConcreteSubject extends Subject{
private int state;
public int getState() {
return state;
}
//状态改变,就调用通知所有观察者方法
public void setState(int state) {
this.state = state;
this.notifyAllObserver();
}
}
package observer;
public class Client {
public static void main(String[] args) {
//目标对象
ConcreteSubject sub = new ConcreteSubject();
//创建多个观察者
ObserverA o1 = new ObserverA();
ObserverA o2 = new ObserverA();
ObserverA o3 = new ObserverA();
//将这三个对象添加到subject容器中
sub.register(o1);
sub.register(o2);
sub.register(o3);
//改变目标对象状态
sub.setState(1000);
//查看观察者是否改变
System.out.println(o1.getMystate());
System.out.println(o2.getMystate());
System.out.println(o3.getMystate());
}
}