一、简介
观察者模式(Observer),又加发布订阅模式(Public/Subscribe),定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
二、结构图
三、代码实现
1.Subject
public interface Subject {
List<Observer> observers = new ArrayList<>();
default void attach(Observer observer) {
observers.add(observer);
}
default void detach(Observer observer) {
observers.remove(observer);
}
default void notifyObservers() {
for (Observer observer : observers) {
observer.update(this);
}
}
}
2.ConcreteSubject
public class ConcreteSubject implements Subject {
private String msg;
public ConcreteSubject(String msg) {
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
3.Observer
public interface Observer {
void update(Object obj);
}
4.ConcreteObserver
public class ConcreteObserver implements Observer{
private String name;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void update(Object obj) {
System.out.println(name + "接到通知,通知内容为:" + ((ConcreteSubject)obj).getMsg());
}
}
5.Client
public class Client {
public static void main(String[] args) {
Subject subject = new ConcreteSubject("代码出问题了,周末加班修复bug。");
subject.attach(new ConcreteObserver("A"));
subject.attach(new ConcreteObserver("B"));
subject.attach(new ConcreteObserver("C"));
subject.notifyObservers();
}
}