本文共 1559 字,大约阅读时间需要 5 分钟。
观察者模式是一种设计模式,定义了对象之间的一对多依赖关系。当一个对象的状态发生变化时,所有依赖该对象的其他对象都会得到通知,并根据需要进行相应的变化。
观察者模式的核心组成部分包括以下几个角色:
Subject(目标对象):被观察的对象,其状态变化会触发通知事件。Subject必须提供注册和移除观察者的接口,并能通知所有注册的观察者。
Observer(观察者):接收通知的对象,通常通过实现一个update方法来处理目标状态的变化。
SubjectImpl:Subject的具体实现类,负责维护观察者列表并通知它们。
ObserverImpl:观察者的具体实现类,负责接收目标对象的通知并执行相应的业务逻辑。
以下是一个基于Java的观察者模式实现示例:
// 观察者接口public interface Observer { void update(Subject s);}// 观察者具体实现类public class ObserverImpl implements Observer { private String state; @Override public void update(Subject s) { // 根据目标对象的状态更新自身状态 state = ((SubjectImpl) s).getState(); }}// 被观察的目标对象public class Subject { private List observers = new ArrayList<>(); // 注册观察者 public void regist(Observer ob) { observers.add(ob); } // 移除观察者 public void remove(Observer ob) { observers.remove(ob); } // 通知所有观察者状态改变 public void notifyObserver() { for (Observer ob : observers) { ob.update(this); } }}// 目标对象的具体实现类public class SubjectImpl extends Subject { private String state; public String getState() { return state; } public void setState(String state) { this.state = state; // 状态更新,通知观察者 notifyObserver(); }} 目标与观察者之间建立一对多关系,但观察者可以同时观察多个目标。
观察者可以通过不同的update方法处理不同目标对象的状态变化。
Java中提供了Observable类作为目标对象的实现,Observer接口定义了观察者需要实现的方法。
观察者模式的核心优势在于它能够将目标对象和其依赖的观察者分离,使得目标对象的状态变化能够自动通知所有关注的观察者,从而实现松耦合的设计,提升系统的可扩展性和可维护性。
转载地址:http://brqfk.baihongyu.com/