举例:业务场景
import java.util.ArrayList;
import java.util.List;
interface Observer {
void update(String orderId, String status);
}
class UserObserver implements Observer {
private String name;
public UserObserver(String name) {
this.name = name;
}
@Override
public void update(String orderId, String status) {
System.out.println("用户 " + name + " 收到通知:订单 " + orderId + " 状态变更为:" + status);
}
}
class LogisticsObserver implements Observer {
@Override
public void update(String orderId, String status) {
System.out.println("物流系统接收通知:订单 " + orderId + " 状态变更为:" + status);
if ("已发货".equals(status)) {
System.out.println("物流系统开始处理发货流程。");
}
}
}
class Order {
private String orderId;
private String status;
private List<Observer> observers = new ArrayList<>();
public Order(String orderId) {
this.orderId = orderId;
}
public void addObserver(Observer observer) {
observers.add(observer);
}
public void removeObserver(Observer observer) {
observers.remove(observer);
}
public void setStatus(String status) {
this.status = status;
System.out.println("订单 " + orderId + " 状态更新为:" + status);
notifyObservers();
}
private void notifyObservers() {
for (Observer observer : observers) {
observer.update(orderId, status);
}
}
}
public class ObserverPatternDemo {
public static void main(String[] args) {
Order order = new Order("12345");
UserObserver user = new UserObserver("张三");
LogisticsObserver logistics = new LogisticsObserver();
order.addObserver(user);
order.addObserver(logistics);
order.setStatus("待支付");
order.setStatus("已支付");
order.setStatus("已发货");
}
}