区别:前者低耦合,每次观察者变更,被观察者要做相应变更处理;后者完全无耦合。

观察者模式

  1. class Observable{
  2. @Getter
  3. @Setter
  4. private List<Observer> observerList;
  5. void changed(){
  6. for (Observer observer : observerList) {
  7. // 通知各个观察者 天气变了
  8. observer.change();
  9. }
  10. }
  11. }
  12. class Observer {
  13. private String name;
  14. Observer(String name) {
  15. this.name = name;
  16. }
  17. void change() {
  18. System.out.println(name + "改变了");
  19. }
  20. }
  21. public static void main(String[] args) {
  22. Observer 温度计 = new Observer("温度计");
  23. Observer 气压计 = new Observer("气压计");
  24. Observer 湿度计 = new Observer("温度计");
  25. List<Observer> observers = new ArrayList<>();
  26. observers.add(温度计);
  27. observers.add(气压计);
  28. observers.add(湿度计);
  29. Observable observable = new Observable();
  30. observable.setObserverList(observers);
  31. observable.changed();
  32. }

参考资料

观察者和发布订阅https://zhuanlan.zhihu.com/p/51357583