观察者模式: 定义了一种一对多的依赖关系,让多个观察对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。
应用举例: 如一个放哨的人,发现敌情后通知各个部门,然后各个部门做出自己的措施
类图:
代码:
//观察者类
public abstract class Observer {
public abstract void update();
}
public class XiaoLiObserver extends Observer{
private Subject mSubject;
public XiaoLiObserver(Subject subject) {
mSubject = subject;
mSubject.attached(this);
}
@Override
public void update() {
System.out.println("xiali get state is " + mSubject.getSubjectState());
}
}
public class XiaoMingObsever extends Observer {
private Subject mSubject;
public XiaoMingObsever(Subject subject) {
mSubject = subject;
mSubject.attached(this);
}
@Override
public void update() {
System.out.println("xiaoming get state is " + mSubject.getSubjectState());
}
}
//主题类,也可以叫通知者
public class Subject {
private List<Observer> observerList = new ArrayList<Observer>();
private String subjectState;
public void attached(Observer observer) {
observerList.add(observer);
}
public void detach(Observer observer) {
observerList.remove(observer);
}
public void notifyObserver() {
for (Observer observer : observerList) {
observer.update();
}
}
public String getSubjectState() {
return subjectState;
}
public void setSubjectState(String subjectState) {
this.subjectState = subjectState;
notifyObserver();
}
}
xiali get state is 鬼子来了
xiaoming get state is 鬼子来了