参考:http://www.jdon.com/designpatterns/observer.htm
还在看大话设计模式,今天偶然翻到这个模式,所以写写~~下面的内容均和此书有关。
观察者模式(Observer):适用于多个系统或者对象与一个特定的对象进行联动,当这个对象某个状态改变的时候,触发具体抽象类的Update函数,对多个对象进行update。
下面是这个观察者模式的原型图
源码:
Subject类
package observer.prototype;
import java.util.ArrayList;
public abstract class Subject {
private ArrayList<Observer> observers = new ArrayList<Observer> ();
public void Attach(Observer observer){
observers.add(observer);
}
public void Detach(Observer observer){
observers.remove(observer);
}
public void Notify(){
for(Observer observer:observers){
observer.Update();
}
}
}
Subject的实现类:
package observer.prototype;
public class ConcreteSubject extends Subject {
private String subjectState;
public void setSubjectState(String subjectState) {
this.subjectState = subjectState;
}
public String getSubjectState() {
return subjectState;
}
}
Observer的抽象类:
package observer.prototype;
public abstract class Observer {
public abstract void Update();
}
Observer的具体类:
package observer.prototype;
public class ConcreteObserver extends Observer {
private String name;
private String observerState;
private ConcreteSubject subject;
ConcreteObserver(ConcreteSubject subject,String name){
this.name = name;
this.subject = subject;
}
@Override
public void Update() {
observerState = subject.getSubjectState();
System.out.println("观察者 "+name+"的状态是"+observerState);
}
}