小工具知识网

当前位置: 首页 > 行业知识 > 设计模式-观察者模式使用教程

行业知识

设计模式-观察者模式使用教程

2026-11-12 03:46:52 来源:互联网转载

观察者���式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象(称为“主题”或“可观察者”)的状态发生变化时,所有依赖于它的对象(称为“观察者”)都会被自动通知并更新。

()

观察者模式主要涉及两类对象:

  1. 可观察者(Observable,也称为主题Subject):它维护一组观察者,提供用于添加、移除以及通知观察者的方法。
  2. 观察者(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服务器怎么炸?

下一篇:易语言实现POST数据接收方法与技巧解析