今天来介绍的是,行为模式中的观察者模式
从使用的目的来说,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己
package cn.edu.ken.designpattern.observer;
public class ConcreteObserver extends Observer {
private String observerState;
private String name;
private ConcreteSubject subject;
public ConcreteObserver(ConcreteSubject concreteSubject, String observer) {
// TODO Auto-generated constructor stub
this.observerState = observer;
this.name = observer;
this.subject = concreteSubject;
}
@Override
public void update() {
// TODO Auto-generated method stub
observerState = subject.getSubjectState();
System.out.println("name:"+name+",subjectState:"+observerState);
}
}
package cn.edu.ken.designpattern.observer;
public abstract class Observer {
public abstract void update();
}
package cn.edu.ken.designpattern.observer;
public class ConcreteSubject extends Subject {
private String subjectState;
public String getSubjectState() {
return this.subjectState;
}
public void setSubjectState(String state){
this.subjectState = state;
}
}
package cn.edu.ken.designpattern.observer;
import java.util.ArrayList;
import java.util.List;
public class Subject {
List<Observer> observers = new ArrayList();
protected void Attach(Observer observer){
observers.add(observer);
}
protected void Detach(Observer observer){
observers.remove(observer);
}
protected void Notify(){
for (Observer observer: observers){
observer.update();
}
}
}
最后是使用的类
package cn.edu.ken.designpattern.observer;
public class Client {
public static void main(String[] args){
ConcreteSubject subject = new ConcreteSubject();
subject.Attach(new ConcreteObserver(subject,"ObserverA"));
subject.Attach(new ConcreteObserver(subject,"ObserverB"));
subject.Attach(new ConcreteObserver(subject,"ObserverC"));
subject.setSubjectState("Ready");
subject.Notify();
}
}