Observer Pattern 观察者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某个主题对象。主题对象发生状态变化时,会通知所有观察着,使它们能够更新自己。
当一个对象发生改变时,要同时改变其他对象,就用观察着模式
package observater.pattern;
public class ObserverPattern {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ConcreteSubject subject=new ConcreteSubject();
ConcreteObserver observer1=new ConcreteObserver("OBSERVER1",subject);
ConcreteObserver observer2=new ConcreteObserver("OBSERVER2",subject);
ConcreteObserver observer3=new ConcreteObserver("OBSERVER3",subject);
subject.Attach(observer1);
subject.Attach(observer2);
subject.Attach(observer3);
//subject.Detach(observer2);
subject.setSubjectState("State1");
subject.Notify();
subject.setSubjectState("State2");
subject.Notify();
}
}
package observater.pattern;
public interface Observer {
public void update();
}
package observater.pattern;
public class ConcreteObserver implements Observer {
private String name;
private String observerState;
private ConcreteSubject subject;
public ConcreteObserver(String name,ConcreteSubject subject){
this.name=name;
this.setSubject(subject);
}
@Override
public void update() {
// TODO Auto-generated method stub
this.observerState=subject.getSubjectState();
System.out.println(name+"‘s state has changed to "+observerState);
}
public void setSubject(ConcreteSubject subject) {
this.subject = subject;
}
public ConcreteSubject getSubject() {
return subject;
}
}
package observater.pattern;
import java.util.ArrayList;
import java.util.List;
public class Subject {
private List<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 o:observers){
o.update();
}
}
}
package observater.pattern;
public class ConcreteSubject extends Subject {
private String subjectState;
public void setSubjectState(String subjectState) {
this.subjectState = subjectState;
}
public String getSubjectState() {
return subjectState;
}
}