设计模式-观察者模式(发布订阅模式)
一、需要的类
一个发布类:里面一个是别人需要订阅的属性,以及用于存储订阅者的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);}@Overridepublic 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);}@Overridepublic 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");}
}