行业知识
设计模式-观察者模式使用教程
2026-11-12 03:46:52
来源:互联网转载
观察者���式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象(称为“主题”或“可观察者”)的状态发生变化时,所有依赖于它的对象(称为“观察者”)都会被自动通知并更新。
()观察者模式主要涉及两类对象:
- 可观察者(Observable,也称为主题Subject):它维护一组观察者,提供用于添加、移除以及通知观察者的方法。
- 观察者(Observer):它定义了接收来自可观察者通知的更新方法。
观察者模式允许可观察者在不了解观察者具体实现的情况下,发送通知给一组观察者,从而实现解耦。
()实现观察者模式
下面是如何在Java中实现观察者模式的一个例子:
首先,定义观察者接口:
1public interface Observer {2 void update(String message);3} 然后,创建可观察者接口:
1public interface Observable {2 void addObserver(Observer observer);3 void removeObserver(Observer observer);4 void notifyObservers(String message);5} 实现可观察者类:
1import java.util.ArrayList;2import java.util.List;34public class NewsAgency implements Observable {5 private List observers = new ArrayList();6 private String news;78 public void setNews(String news) {9 this.news = news;10 notifyObservers(news);11 }1213 @Override14 public void addObserver(Observer observer) {15 observers.add(observer);16 }1718 @Override19 public void removeObserver(Observer observer) {20 observers.remove(observer);21 }2223 @Override24 public void notifyObservers(String message) {25 for (Observer observer : observers) {26 observer.update(message);27 }28 }29} 接着,实现一个具体的观察者类:
1public class NewsReader implements Observer {2 private String name;34 public NewsReader(String name) {5 this.name = name;6 }78 @Override9 public void update(String message) {10 System.out.println(name + " received news: " + message);11 }12} 最后,展示如何使用这些类:
1public class Main {2 public static void main(String[] args) {3 NewsAgency newsAgency = new NewsAgency();45 NewsReader reader1 = new NewsReader("Reader 1");6 NewsReader reader2 = new NewsReader("Reader 2");78 newsAgency.addObserver(reader1);9 newsAgency.addObserver(reader2);1011 newsAgency.setNews("New article about Design Patterns!");1213 newsAgency.removeObserver(reader1);1415 newsAgency.setNews("Another article, only Reader 2 will receive this!");16 }17} 在上面的例子中,NewsAgency 类是可观察者,它保存了一个观察者列表并有方法来添加、移除和通知观察者。NewsReader 类实现了 Observer 接口,定义了如何接收更新的逻辑。当 NewsAgency 有新消息时,它会调用 notifyObservers() 方法,该方法依次调用每个观察者的 update() 方法,传递消息给他们。
上一篇:175服务器怎么炸?