版权声明:Leo.All Rights Reserved. https://blog.csdn.net/qq_41113081/article/details/89334733
- 当ConcreteSubject的状态发生改变时,会调用其内部的方法Notify(),该方法内部会对每一个监听它的观察者发出update通知
/**
* 观察者接口
* 可以针对某个通知做出反应
*/
public interface Observer {
void update();
}
/**
* 具体的观察者
*/
public class ConcreteObserver implements Observer {
/**
* 1.观察者名字
* 2.观察者状态
* 3.具体的通知者
*/
private String name;
private String observerState;
private ConcreteSubject concreteSubject;
public ConcreteObserver(String name, ConcreteSubject concreteSubject) {
this.name = name;
this.concreteSubject = concreteSubject;
}
@Override
public void update() {
observerState = concreteSubject.getSubjectState();
System.out.println("观察者 " + name + " 的新状态是 " + observerState);
}
}
import java.util.ArrayList;
import java.util.List;
/**
* 抽象通知者
* 可以有多个观察者接收它发出的通知
*/
public abstract class Subject {
private List<Observer> observers = new ArrayList<>();
public void add(Observer observer) {
observers.add(observer);
}
public void remove(Observer observer) {
observers.remove(observer);
}
public void Notify() {
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;
}
}
public class Main {
public static void main(String[] args) {
ConcreteSubject concreteSubject = new ConcreteSubject();
concreteSubject.add(new ConcreteObserver("A",concreteSubject));
concreteSubject.add(new ConcreteObserver("B",concreteSubject));
concreteSubject.add(new ConcreteObserver("C",concreteSubject));
concreteSubject.setSubjectState("改变的状态");
concreteSubject.Notify();
}
}