深圳手机端网站建设收费,服装定制费用,吉林长春seo网站建设网站优化,2345天气预报#x1f4a7; 观察者模式 \color{#FF1493}{观察者模式} 观察者模式#x1f4a7; #x1f337; 仰望天空#xff0c;妳我亦是行人.✨ #x1f984; 个人主页——微风撞见云的博客#x1f390; #x1f433; 《数据结构与算法》专栏的文章图文并茂#x1f995;… 观察者模式 \color{#FF1493}{观察者模式} 观察者模式 仰望天空妳我亦是行人.✨ 个人主页——微风撞见云的博客 《数据结构与算法》专栏的文章图文并茂生动形象简单易学欢迎大家来踩踩~ 《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~ 《每天一点小知识》专栏的文章可以丰富你的知识库滴水成河~ 希望本文能够给读者带来一定的帮助~文章粗浅敬请批评指正 文章目录 设计模式之观察者模式引言观察者模式的概念和思想应用场景实现方式使用接口使用 Java 内置的观察者模式 使用观察者模式总结 结语 设计模式之观察者模式
引言
设计模式是软件开发中重要的概念之一。观察者模式是设计模式中的一种它用于定义对象之间的一对多依赖关系当一个对象的状态发生改变时其所有依赖者都会得到通知并自动更新。在本文中我们将深入探讨观察者模式的概念和思想并介绍观察者模式的应用场景以及常见的代码实现方式。 观察者模式的概念和思想 观察者模式是一种行为型设计模式它建立了一种对象之间的依赖关系当一个对象的状态发生改变时其所有依赖者都会得到通知并自动更新。 观察者模式的核心思想是将观察者和被观察者解耦使得它们可以独立变化。被观察者维护一个观察者列表并提供注册、注销和通知观察者的方法。观察者通过注册到被观察者上实现对被观察者状态变化的监听。
观察者模式的应用场景以及常见的代码实现方式 ↓
应用场景 观察者模式通常在以下场景中使用
当一个对象的状态变化需要通知其他对象并且不希望与被通知的对象之间产生紧耦合关系时。当一个对象的改变需要同时改变其他对象并且不知道有多少对象需要改变时。当一个对象需要将自己的改变通知给一组对象时。
实现方式 观察者模式有多种实现方式其中最常见的方式包括使用接口和使用 Java 内置的观察者模式实现。
使用接口 首先我们定义一个被观察者接口 Subject 和一个观察者接口 Observer
public interface Subject {void registerObserver(Observer observer);void unregisterObserver(Observer observer);void notifyObservers();
}public interface Observer {void update();
}在上述代码中Subject 接口定义了注册观察者、注销观察者和通知观察者的方法。Observer 接口定义了观察者的 update() 方法用于接收被观察者的通知。 接下来我们实现具体的被观察者类 ConcreteSubject 和 ConcreteObserver
public class ConcreteSubject implements Subject {private ListObserver observers new ArrayList();private int state;public void registerObserver(Observer observer) {observers.add(observer);}public void unregisterObserver(Observer observer) {observers.remove(observer);}public void notifyObservers() {for (Observer observer : observers) {observer.update();}}public int getState() {return state;}public void setState(int state) {this.state state;notifyObservers();}
}public class ConcreteObserver implements Observer {private Subject subject;public ConcreteObserver(Subject subject) {this.subject subject;subject.registerObserver(this);}public void update() {int state subject.getState();// 处理被观察者状态变化的逻辑}
}在上述代码中ConcreteSubject 类实现了 Subject 接口它维护了一个观察者列表并实现了注册、注销和通知观察者的方法。当 ConcreteSubject 的状态发生变化时它会调用 notifyObservers() 方法通知所有观察者。
ConcreteObserver 类实现了 Observer 接口它在构造函数中注册到被观察者上并实现了 update() 方法来处理被观察者状态变化的逻辑。
使用 Java 内置的观察者模式 Java 提供了内置的观察者模式实现可以通过 java.util.Observable 类和 java.util.Observer 接口来实现观察者模式。
import java.util.Observable;
import java.util.Observer;public class ConcreteSubject extends Observable {private int state;public int getState() {return state;}public void setState(int state) {this.state state;setChanged();notifyObservers();}
}public class ConcreteObserver implements Observer {public void update(Observable o, Object arg) {int state ((ConcreteSubject) o).getState();// 处理被观察者状态变化的逻辑}
}在上述代码中ConcreteSubject 类继承自 java.util.Observable 类并使用 setChanged() 方法标记状态变化然后调用 notifyObservers() 方法通知观察者。
ConcreteObserver 类实现了 java.util.Observer 接口它的 update() 方法会在被观察者状态变化时被调用。
使用观察者模式 以下是观察者模式的使用示例
public class Client {public static void main(String[] args) {ConcreteSubject subject new ConcreteSubject();ConcreteObserver observer1 new ConcreteObserver(subject);ConcreteObserver observer2 new ConcreteObserver(subject);subject.setState(1);// 输出处理被观察者状态变化的逻辑// 输出处理被观察者状态变化的逻辑}
}在上述代码中我们创建了一个具体的被观察者对象 ConcreteSubject 和两个具体的观察者对象 ConcreteObserver。通过将观察者注册到被观察者上当被观察者状态发生变化时观察者的 update() 方法会被调用。
总结 观察者模式是一种有用的设计模式它能够实现对象之间的一对多依赖关系当一个对象的状态发生改变时其所有依赖者都会得到通知并自动更新。通过观察者模式我们可以实现松耦合的对象间通信提高代码的灵活性和可维护性。 结语
初学一门技术时总有些许的疑惑别怕它们是我们学习路上的点点繁星帮助我们不断成长。
积少成多滴水成河。文章粗浅希望对大家有帮助