观察者模式主要是为了松耦合,通俗的讲是发布订阅,适用于消息通知的场景。

1、定义

  观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

2、UML

     

3、案例

定义主题接口:

  1. package ilan.Observer;
  2. public interface Subject {
  3. void registerObserver(Observer observer);
  4. void removeObserver(Observer observer);
  5. void notifyObservers();
  6. }

定义主题实现类:

  1. package ilan.Observer;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class ConcreteSubject implements Subject {
  5. private List<Observer> observers = new ArrayList<>();
  6. @Override
  7. public void registerObserver(Observer observer) {
  8. observers.add(observer);
  9. }
  10. @Override
  11. public void removeObserver(Observer observer) {
  12. observers.remove(observer);
  13. }
  14. @Override
  15. public void notifyObservers() {
  16. for (Observer o : observers) {
  17. o.update("消息通知");
  18. }
  19. }
  20. }

 

定义观察者接口:

  1. package ilan.Observer;
  2. public interface Observer {
  3. void update(String message);
  4. }

定义观察者实现类:

  1. package ilan.Observer;
  2. public class ConcreteObserver1 implements Observer {
  3. @Override
  4. public void update(String message) {
  5. System.out.println("观察者1接收到" + message);
  6. }
  7. }
  1. package ilan.Observer;
  2. public class ConcreteObserver2 implements Observer {
  3. @Override
  4. public void update(String message) {
  5. System.out.println("观察者2接收到" + message);
  6. }
  7. }

 

编写测试程序:

  1. package ilan.Observer;
  2. public class MainClass {
  3. public static void main(String[] args) {
  4. Subject subject = new ConcreteSubject();
  5. Observer c1 = new ConcreteObserver1();
  6. Observer c2 = new ConcreteObserver2();
  7. subject.registerObserver(c1);
  8. subject.registerObserver(c2);
  9. subject.notifyObservers();
  10. }
  11. }

测试结果:

观察者1接收到消息通知
观察者2接收到消息通知

 

版权声明:本文为sgx2019原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/sgx2019/p/11300086.html