场景 (1)比如我们有一个目标对象,一旦这个目标对象的状态改变了,然后的话就去通知相关的对象,我的状态改变了,数据也变化了

1.观察者模式

  1. package com.example.demo.pattern.observer;
  2. import java.util.Observable;
  3. import java.util.Observer;
  4. /**
  5. * @author chenchao
  6. * @date 2021/11/9
  7. */
  8. public class ObserverPatternDemo {
  9. public static void main(String[] args) {
  10. Subject subject = new Subject(0);
  11. Observer observer = new ConcreteObserver();
  12. subject.addObserver(observer);
  13. subject.setState(1);
  14. subject.setState(2);
  15. }
  16. public static class Subject extends Observable {
  17. private Integer state;
  18. public Subject(Integer state) {
  19. this.state = state;
  20. }
  21. public Integer getState() {
  22. return state;
  23. }
  24. public void setState(Integer state) {
  25. // 在这里状态就改变了
  26. this.state = state;
  27. // 通知关联的一些观察者,说我的状态变化了
  28. this.setChanged();
  29. // this.notifyObservers(state);
  30. this.notifyObservers();
  31. }
  32. }
  33. public static class ConcreteObserver implements Observer {
  34. @Override
  35. public void update(Observable o, Object arg) {
  36. // Integer state = (Integer) arg;
  37. Subject subject = (Subject) o;
  38. Integer state = subject.getState();
  39. System.out.println("目标对象的状态变化成:" + state);
  40. }
  41. }
  42. }

2.说明

前端开发,js脚本,要对界面上的各种视图组件,表格点击事件,按钮点击,添加监听器,一旦某种事件发生,就会执行监听器中的方法

观察者模式还是非常常用的,不过说实话,常见于基于zookeeper进行分布式系统之间的协调工作,比如分布式锁的注册以及监听是否释放。还有就是两个系统之间如果做了异步的处理,那么如果A系统发送异步请求给了B系统,但是要得到B系统的一个状态改变的消息,可以采用观察者模式。

基于zookeeper去做分布式锁