java监听者模式怎么实现

   2025-02-13 2610
核心提示:在Java中实现观察者模式,需要定义两个角色:观察者(Observer)和被观察者(Subject)。观察者可以注册到被观察者,当被观察者

在Java中实现观察者模式,需要定义两个角色:观察者(Observer)和被观察者(Subject)。观察者可以注册到被观察者,当被观察者状态发生变化时,观察者会收到通知并进行相应的处理。

以下是一个简单的示例代码,演示如何实现观察者模式:

import java.util.ArrayList;import java.util.List;// 观察者接口interface Observer {    void update(String message);}// 被观察者接口interface Subject {    void registerObserver(Observer observer);    void removeObserver(Observer observer);    void notifyObservers();}// 具体的观察者类class ConcreteObserver implements Observer {    private String name;    public ConcreteObserver(String name) {        this.name = name;    }    @Override    public void update(String message) {        System.out.println(name + " received message: " + message);    }}// 具体的被观察者类class ConcreteSubject implements Subject {    private List<Observer> observers = new ArrayList<>();    private String message;    @Override    public void registerObserver(Observer observer) {        observers.add(observer);    }    @Override    public void removeObserver(Observer observer) {        observers.remove(observer);    }    @Override    public void notifyObservers() {        for (Observer observer : observers) {            observer.update(message);        }    }    public void setMessage(String message) {        this.message = message;        notifyObservers();    }}public class Main {    public static void main(String[] args) {        ConcreteObserver observer1 = new ConcreteObserver("Observer 1");        ConcreteObserver observer2 = new ConcreteObserver("Observer 2");        ConcreteSubject subject = new ConcreteSubject();        subject.registerObserver(observer1);        subject.registerObserver(observer2);        subject.setMessage("Hello World!");    }}

在上述代码中,ConcreteObserver实现了Observer接口,并实现了update方法,用于接收被观察者的消息。ConcreteSubject实现了Subject接口,实现了注册观察者、移除观察者和通知观察者的方法。被观察者状态发生变化时,调用notifyObservers方法通知所有观察者。

Main类中,创建了两个观察者observer1observer2,以及一个被观察者subject。将观察者注册到被观察者后,调用setMessage方法改变被观察者的状态,观察者将收到相应的通知并输出消息。

以上就是一个简单实现观察者模式的示例代码,你可以根据自己的需求进行修改和扩展。

 
 
更多>同类维修知识
推荐图文
推荐维修知识
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  网站留言