一、需要的类
一个发布类:里面一个是别人需要订阅的属性,以及用于存储订阅者的list,attach方法是往list集合里面添加元素,notifyObservers通知方法,也就是循环调用订阅者里面的一个方法,这个notifyObservers在set属性的时候调用
一个订阅者抽象类:发布者notifyObservers里面调用的那个方法,外加一个订阅者用于获取里面的内容
N个订阅者:在构造器中将自己注册到发布者集合中,外加一个接口实现内容
二、实现代码
发布类
public class Subject {
private String state;
private List<Observer> observers = new ArrayList<Observer>();
public void attach(Observer observer)
{
observers.add(observer);
}
public void notifyObservers()
{
for (Observer observer : observers)
{
observer.update();
}
}
public void setState(String state)
{
this.state = state;
notifyObservers();
}
public String getState()
{
return state;
}
}
订阅抽象类
public abstract class Observer {
public Subject subject;
public abstract void update();
}
订阅实现类1
public class BinaryObserver extends Observer{
public BinaryObserver(Subject subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println("Binary String: " + this.subject.getState());
}
}
订阅实现类2
public class OctalObserver extends Observer{
public OctalObserver(Subject subject) {
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println("Octal String: " + subject.getState());
}
}
调用类
@SpringBootApplication
public class ObserverApplication {
public static void main(String[] args) {
Subject subject = new Subject();
new BinaryObserver(subject);
new OctalObserver(subject);
subject.setState("10");
subject.setState("20");
}
}