观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象,这个主体对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。
下面是观察者模式的结构图:
下面演示一个Demo:
Subject类:
abstract class Subject {
private List<Observer> observers = new ArrayList<Observer>();
public void add(Observer observer) {
observers.add(observer);
}
public void delete(Observer observer) {
observers.remove(observer);
}
public void notice() {
for(Observer observer : observers)
observer.update();
}
}
它的实现类:
public class ConcreteSubject extends Subject{
private String SubjectState;
public String getSubjectState() {
return SubjectState;
}
public void setSubjectState(String SubjectState) {
this.SubjectState = SubjectState;
}
}
Observer类:
abstract class Observer {
public abstract void update();
}
它的实现类:
public class ConcreteObserver extends Observer{
private String name;
private String ObserverState;
private ConcreteSubject subject;
public ConcreteObserver(ConcreteSubject subject, String name) {
this.subject = subject;
this.name = name;
}
@Override
public void update() {
ObserverState = subject.getSubjectState();
System.out.println(name + " 新状态是" + ObserverState);
}
public ConcreteSubject getSubject() {
return subject;
}
public void setSubject(ConcreteSubject subject) {
this.subject = subject;
}
}
客户端:
public class Client {
public static void main(String[] args) {
ConcreteSubject subject = new ConcreteSubject();
subject.add(new ConcreteObserver(subject, "A"));
subject.add(new ConcreteObserver(subject, "B"));
subject.add(new ConcreteObserver(subject, "C"));
subject.setSubjectState("老板来着");
subject.notice();
}
}