观察者模式

来源:互联网 发布:查询 域名 最早 注册人 编辑:程序博客网 时间:2024/06/01 09:17

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象,这个主体对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。

下面是观察者模式的结构图:

 

下面演示一个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;}@Overridepublic 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();}}