• 设计模式-行为型模式-观察者模式


    观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。[DP]

     

    1. //首先是Observer接口,定义了观察者需要实现的更新方法:
    2. public interface Observer {
    3. void update(String message);
    4. }
    5. //接着是Subject接口,定义了主题需要实现的注册、移除和通知观察者的方法:
    6. public interface Subject {
    7. void registerObserver(Observer observer);
    8. void removeObserver(Observer observer);
    9. void notifyObservers(String message);
    10. }
    11. //然后是实现Subject接口的ConcreteSubject类,它维护了一个观察者列表:
    12. java
    13. public class ConcreteSubject implements Subject {
    14. private List<Observer> observers = new ArrayList<>();
    15. @Override
    16. public void registerObserver(Observer observer) {
    17. observers.add(observer);
    18. }
    19. @Override
    20. public void removeObserver(Observer observer) {
    21. observers.remove(observer);
    22. }
    23. @Override
    24. public void notifyObservers(String message) {
    25. for (Observer observer : observers) {
    26. observer.update(message);
    27. }
    28. }
    29. }
    30. //接下来是实现Observer接口的ConcreteObserver类,它会在接收到通知时执行一些操作:
    31. public class ConcreteObserver implements Observer {
    32. private String name;
    33. public ConcreteObserver(String name) {
    34. this.name = name;
    35. }
    36. @Override
    37. public void update(String message) {
    38. System.out.println(name + " received message: " + message);
    39. }
    40. }
    41. //最后是客户端代码,它创建主题和观察者,并演示了如何注册、通知和移除观察者:
    42. public class ObserverPatternDemo {
    43. public static void main(String[] args) {
    44. Subject subject = new ConcreteSubject();
    45. Observer observer1 = new ConcreteObserver("Observer 1");
    46. Observer observer2 = new ConcreteObserver("Observer 2");
    47. // 注册观察者
    48. subject.registerObserver(observer1);
    49. subject.registerObserver(observer2);
    50. // 通知观察者
    51. subject.notifyObservers("Hello, this is a test message!");
    52. // 移除观察者
    53. subject.removeObserver(observer1);
    54. // 再次通知,此时只有observer2会收到通知
    55. subject.notifyObservers("Another test message!");
    56. }
    57. }

  • 相关阅读:
    Java理论题(2)——简答题
    CUDA C编程权威指南:2.1-CUDA编程模型
    mnist手写数字识别
    神经网络的数学基础资料,神经网络的数学理论
    c# HashSet vs SortedSet
    订单拆分总结
    Flutter FlutterActivity找不到
    【各种**问题系列】什么是CI&CD(持续集成和持续交付、部署)
    MySQL子查询
    els 长条碰撞变形判断
  • 原文地址:https://blog.csdn.net/qq_34690079/article/details/136586908