Java Observer是一种设计模式,它定义了对象之间的一对多依赖性,当一个对象改变状态,它的所有依赖者都会自动被通知并更新。
一、Java Observer模式基础
1、Observer模式主要是用于实现分布式系统的事件服务,实现事件驱动架构。其主要由两类对象组成:被观察者(Subject)和观察者(Observer)。
// 被观察者
public class Subject {
private List observers = new ArrayList();
public void registerObserver(Observer observer) {
observers.add(observer);
}
public void notifyObservers(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}
}
2、观察者(Observer)定义了一个更新接口,当被观察者状态发生改变时,这个接口就会被调用。
// 观察者
public interface Observer {
void update(String message);
}
二、Java Observer模式实现步骤
1、首先,创建观察者接口和具体的观察者类。观察者接口定义了一个更新接口,具体的观察者类实现了观察者接口。
// 观察者接口
public interface Observer {
void update(String message);
}
// 具体观察者类
public class ConcreteObserver implements Observer {
public void update(String message) {
System.out.println("ConcreteObserver get message: " + message);
}
}
2、其次,创建被观察者类。被观察者类维护观察者列表,并实现注册观察者、移除观察者、通知观察者等方法。
// 被观察者类
public class Subject {
private List observers = new ArrayList();
public void registerObserver(Observer observer) {
observers.add(observer);
}
public void removeObserver(Observer observer) {
observers.remove(observer);
}
public void notifyObservers(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}
}
三、Java相应的Observer类的使用
1、Java内置的Observer模式主要涉及java.util.Observer接口和java.util.Observable类。Observable类是被观察者类,Observer接口是观察者接口。当Observable类的notifyObservers()方法被调用时,会通知所有已注册的观察者。
import java.util.Observable;
import java.util.Observer;
public class JavaObservable extends Observable {
void change(String str) {
setChanged();
notifyObservers(str);
}
}
public class JavaObserver implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println("Received response: " + arg);
}
}
2、使用Java内置的Observer模式,可以通过创建Observable子类和Observer实现类,然后使用Observer实例注册Observable实例,最后通过Observable实例来通知Observer实例。
public static void main(String args[]) {
JavaObserver observer = new JavaObserver();
JavaObservable observable = new JavaObservable();
observable.addObserver(observer);
observable.change("Hello, Observer!");
}
本文标题为:用法介绍Java Observer模式
- Java实现顺序表的操作详解 2023-05-19
- 深入了解Spring的事务传播机制 2023-06-02
- JSP 制作验证码的实例详解 2023-07-30
- ExecutorService Callable Future多线程返回结果原理解析 2023-06-01
- Java中的日期时间处理及格式化处理 2023-04-18
- Spring Security权限想要细化到按钮实现示例 2023-03-07
- SpringBoot使用thymeleaf实现一个前端表格方法详解 2023-06-06
- JSP页面间传值问题实例简析 2023-08-03
- Springboot整合minio实现文件服务的教程详解 2022-12-03
- 基于Java Agent的premain方式实现方法耗时监控问题 2023-06-17