您的位置:首页 > 游戏 > 游戏 > java观察者模式

java观察者模式

2024/11/16 15:36:02 来源:https://blog.csdn.net/wsrzsfgst/article/details/140457235  浏览:    关键词:java观察者模式

观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生变化时,会通知所有观察者,使它们能够自动更新自己的状态。

观察者模式的角色和实现:

  1. 主题(Subject)

    • 主题对象维护一个观察者列表,并提供方法来增加或删除观察者。
    • 当主题状态发生变化时,会通知所有注册的观察者。
  2. 观察者(Observer)

    • 观察者定义了一个更新接口,用于在主题状态发生变化时接收通知和更新自身状态。
  3. 具体主题(Concrete Subject)

    • 具体主题是主题的具体实现,维护着自己的状态。
    • 当状态变化时,负责通知所有注册的观察者。
  4. 具体观察者(Concrete Observer)

    • 具体观察者实现了观察者接口,在接收到主题的通知时执行具体的更新操作。

示例代码演示:

1. 创建主题接口和观察者接口:
// 主题接口
public interface Subject {void registerObserver(Observer observer);void removeObserver(Observer observer);void notifyObservers();
}// 观察者接口
public interface Observer {void update(String message);
}
2. 创建具体主题和具体观察者类:
import java.util.ArrayList;
import java.util.List;// 具体主题实现
public class WeatherStation implements Subject {private List<Observer> observers;private String weatherMessage;public WeatherStation() {this.observers = new ArrayList<>();}@Overridepublic void registerObserver(Observer observer) {observers.add(observer);}@Overridepublic void removeObserver(Observer observer) {observers.remove(observer);}@Overridepublic void notifyObservers() {for (Observer observer : observers) {observer.update(weatherMessage);}}public void setWeatherMessage(String weatherMessage) {this.weatherMessage = weatherMessage;notifyObservers(); // 通知观察者状态更新}
}// 具体观察者实现
public class PhoneDisplay implements Observer {private String weatherMessage;@Overridepublic void update(String message) {this.weatherMessage = message;display();}public void display() {System.out.println("Phone Display: " + weatherMessage);}
}
3. 客户端代码演示观察者模式的应用:
public class Main {public static void main(String[] args) {WeatherStation weatherStation = new WeatherStation();// 创建具体观察者PhoneDisplay phoneDisplay = new PhoneDisplay();// 注册观察者weatherStation.registerObserver(phoneDisplay);// 模拟天气更新,并通知观察者weatherStation.setWeatherMessage("Today is sunny");// 如果需要,可以注销观察者// weatherStation.removeObserver(phoneDisplay);}
}
输出结果:
Phone Display: Today is sunny

在这个例子中:

  • WeatherStation 类实现了 Subject 接口,维护一个观察者列表,并负责通知观察者状态变化。
  • PhoneDisplay 类实现了 Observer 接口,具体实现了在收到通知时如何更新和显示信息。
  • Main 类中,创建了 WeatherStationPhoneDisplay 对象,注册观察者并模拟天气更新,观察者接收到通知后更新并显示最新的天气信息。

观察者模式非常有用,特别是在需要一对多通知的场景,如事件处理、GUI 界面更新、分布式系统中的状态同步等。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com