观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其所有依赖者都会得到通知并自动更新。观察者模式也被称为发布-订阅(Publish/Subscribe)模式。
观察者模式中通常包含以下角色:文章源自新逸网络-https://www.xinac.net/9367.html
1. 抽象主题(Subject):定义了观察者需要关注的事件,和添加、删除和通知观察者的方法。文章源自新逸网络-https://www.xinac.net/9367.html
2. 具体主题(Concrete Subject):实现了抽象主题接口,负责维护观察者列表,并通知观察者。文章源自新逸网络-https://www.xinac.net/9367.html
3. 抽象观察者(Observer):定义了观察者接口,包含了接收通知和更新状态的方法。文章源自新逸网络-https://www.xinac.net/9367.html
4. 具体观察者(Concrete Observer):实现了抽象观察者接口,用于具体实现观察者的操作。文章源自新逸网络-https://www.xinac.net/9367.html
下面是一个简单的 Java 实现观察者模式的示例:文章源自新逸网络-https://www.xinac.net/9367.html
// 抽象主题
interface Subject {
void attach(Observer observer);
void detach(Observer observer);
void notifyObservers(String message);
}
// 具体主题
class ConcreteSubject implements Subject {
private List<Observer> observers = new ArrayList<>();
public void attach(Observer observer) {
observers.add(observer);
}
public void detach(Observer observer) {
observers.remove(observer);
}
public void notifyObservers(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}
}
// 抽象观察者
interface Observer {
void update(String message);
}
// 具体观察者
class ConcreteObserver1 implements Observer {
public void update(String message) {
System.out.println("观察者1收到消息:" + message);
}
}
class ConcreteObserver2 implements Observer {
public void update(String message) {
System.out.println("观察者2收到消息:" + message);
}
}
// 客户端
public class Client {
public static void main(String[] args) {
Subject subject = new ConcreteSubject();
Observer observer1 = new ConcreteObserver1();
Observer observer2 = new ConcreteObserver2();
subject.attach(observer1);
subject.attach(observer2);
subject.notifyObservers("这是一条消息");
}
}在上面的示例中,抽象主题接口定义了观察者需要关注的事件,和添加、删除和通知观察者的方法。具体主题类实现了抽象主题接口,并且负责维护观察者列表,并通知观察者。抽象观察者接口定义了观察者接口,包含了接收通知和更新状态的方法。具体观察者类实现了抽象观察者接口,用于具体实现观察者的操作。文章源自新逸网络-https://www.xinac.net/9367.html
观察者模式的优点是可以将观察者和主题对象解耦,从而提高系统的灵活性和可扩展性。同时,观察者模式可以实现动态联动,当一个对象发生改变时,其所有依赖者都会得到通知并自动更新。但是需要注意的是,由于观察者模式需要维护观察者列表,因此可能会增加系统的复杂度和内存消耗。文章源自新逸网络-https://www.xinac.net/9367.html 文章源自新逸网络-https://www.xinac.net/9367.html










评论