探索计划模式:观察者模式

[复制链接]
发表于 2026-2-10 08:11:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

  在实际开发过程中,计划模式的作用优劣常告急的,应用符合的计划模式不光仅可以镌汰我们的代码量,也可以让我们的代码质量上升一个条理。本日让我们一起投袂而起,一起学习一下观察者模式(Observer Pattern)。
🧐观察者模式简介


  观察者模式是一种举动型 计划模式,它界说了一种一对多的依靠关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生变革时,会主动关照全部注册的观察者对象,从而它们可以大概主动更新自己。最常见的场景就是B站up主和粉丝的关系,up主发布新视频,每一个粉丝都会收到消息,这就是由于利用了观察者模式。
   利用场景
  

  • 消息发布/订阅体系
  • 用户界面组件
  • 股票市场监控监控
  • 变乱驱动体系
  💎焦点概念


  在观察者模式中,重要有两个焦点脚色:


  • 主题(Subject):也被称为被观察者,它维护一个观察者列表,当其状态发生变革时,会关照全部注册的观察者。
  • 观察者(Observer):监听主题对象状态变革,一旦主题状态发生变革,观察者会收到关照并做出相应的处置惩罚。

🌈观察者模式的优点




  • 低耦合性:主题和观察者之间的依靠关系被最小化,两者可以独立变革。
  • 动态性:可以在运行时动态地添加或删除观察者,使得体系更加机动。
  • 相应性:观察者可以实时相应主题的变革,包管了体系的实时性和高效性。
🚚实现步调


接下来,我们将通过以下步调来实现一个简单的观察者模式:
1. 界说主题接口


  确定主题必要提供的方法,如注册观察者、移除观察者和关照观察者。
  1. public interface Subject {
  2.     void registerObserver(Observer observer);
  3.     void removeObserver(Observer observer);
  4.     void notifyObservers(String message);
  5. }
复制代码
2. 实现观察者接口


  观察者必要界说一个更新接口,以便在主题状态变革时被调用。
  1. public interface Observer {
  2.     void update(String message);
  3. }
复制代码
3. 具体主题实现


  实现主题接口,管理观察者列表,并在适当的时间关照观察者。
  1. public class ConcreteSubject implements Subject {
  2.     private List<Observer> observers = new ArrayList<>();
  3.     @Override
  4.     public void registerObserver(Observer observer) {
  5.         observers.add(observer);
  6.     }
  7.     @Override
  8.     public void removeObserver(Observer observer) {
  9.         observers.remove(observer);
  10.     }
  11.     @Override
  12.     public void notifyObservers(String message) {
  13.         for (Observer observer : observers) {
  14.             observer.update(message);
  15.         }
  16.     }
  17. }
复制代码
4. 具体观察者实现


  实现观察者接口,界说在自己的更新举动。
  1. @Data
  2. @AllArgsConstructor
  3. @NoArgsConstructor
  4. public class ConcreteObserver implements Observer {
  5.     private String name;
  6.     @Override
  7.     public void update(String message) {
  8.         System.out.println(this.name + "收到了通知 : " + message);
  9.     }
  10. }
复制代码
5. 调用


  1. public class ObserverPatternClient {
  2.     public static void main(String[] args) {
  3.         ConcreteSubject subject = new ConcreteSubject();
  4.         Observer observer1 = new ConcreteObserver("张三");
  5.         Observer observer2 = new ConcreteObserver("李四");
  6.         subject.registerObserver(observer1);
  7.         subject.registerObserver(observer2);
  8.         subject.notifyObservers("Hello, world!");
  9.     }
  10. }
复制代码

🚩总结



  观察者模式作为一种经典的计划模式,其焦点在于解耦,它允许对象之间的疏松耦合,使得它们可以独立地改变和复用。通过本文的深入分析,我们相识到观察打折模式不光可以大概进步体系的可维护性和可扩展性,还可以大概增强体系的相应性和机动性。在实际开发过程中,当我么面对对象间一对多的关系,且一方对象的状态变革必要关照多方对象时,观察者模式便是一个理想的办理方案。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表