概述
观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象,当主题对象发生变化时,所有依赖于它的观察者对象都会得到通知并更新。
在观察者模式中,有两个主要角色:
- Subject(主题):维护一个观察者列表,提供方法用于添加、删除和通知观察者。
- Observer(观察者):定义一个接口,用于接收主题对象的通知,以便在主题发生变化时更新自身状态。
电商系统的应用
促销通知的例子:
假设我们有一个电商系统,当某件商品有促销活动时,需要通知所有订阅了该商品的用户。在这个例子中,商品是主题,用户是观察者
首先,我们创建一个Subject接口,表示主题:
public interface Subject {
void registerObserver(Observer o);//添加
void removeObserver(Observer o);//删除
void notifyObservers();//通知
}
接下来,我们创建一个Observer接口,表示观察者:
public interface Observer {
void update(String discountInfo);
}
现在,我们创建一个具体的主题,如Product,实现Subject接口:
public class Product implements Subject {
private ArrayList<Observer> observers;
// 折扣消息
private String discountInfo;
public Product() {
observers = new ArrayList<>();
}
public void registerObserver(Observer o) {
observers.add(o);
}
public void removeObserver(Observer o) {
int index = observers.indexOf(o);
if (index >= 0) {
observers.remove(index);
}
}
public void notifyObservers() {
for (Observer o : observers) {
o.update(discountInfo);
}
}
public void discountChanged() {
notifyObservers();
}
public void setDiscountInfo(String discountInfo) {
this.discountInfo = discountInfo;
discountChanged();
}
}
接着,我们创建一个具体的观察者,如User,实现Observer接口:
public class User implements Observer {
private String userName;
private String discountInfo;
private Subject product;
public User(String userName, Subject product) {
this.userName = userName;
this.product = product;
product.registerObserver(this);
}
public void update(String discountInfo) {
this.discountInfo = discountInfo;
display();
}
public void display() {
System.out.println("用户 " + userName + " 收到促销通知: " + discountInfo);
}
}
2个接口,2个具体的类。
现在我们可以创建一个Product实例(主题)并向其注册User观察者。当Product的促销信息发生变化时,User会收到通知并显示促销信息。
public class Main {
public static void main(String[] args) {
//注册2个用户
User user1 = new User("张三", product);
User user2 = new User("李四", product);
// 模拟商品促销信息更新
Product product = new Product();
product.setDiscountInfo("本周末满100减50");
product.setDiscountInfo("双十一全场5折");
}
}
在这个例子中,我们创建了一个Product实例并向其注册了两个User观察者。当Product的促销信息发生变化时,所有观察者都会收到通知并更新自己的显示。这个例子展示了观察者模式在电商系统中的应用,如何实现商品和用户之间的交互。
源码应用
观察者模式在许多Java框架和库中都有应用,以下是一些常见的示例:
-
Java 内置类库:Java内置了一些使用观察者模式的类,例如 java.util.Observable 和 java.util.Observer。虽然在较新的Java版本中已经不推荐使用,但它们仍然是观察者模式的一个例子。你可以通过扩展 Observable 类并实现 Observer 接口来创建自己的观察者模式。
-
Swing GUI 框架:Swing中的事件监听就是观察者模式的应用。比如,你可以为按钮添加动作监听器,当按钮被点击时,监听器会收到通知并执行相应的操作。
-
Spring Framework:Spring框架广泛使用观察者模式,特别是在事件驱动编程中。例如,Spring的事件机制允许你在应用中发布和监听事件,当某些事件发生时,注册的监听器会收到通知并执行相应的逻辑。
-
Android开发:Android中的事件处理也是观察者模式的应用,例如,你可以为按钮添加点击事件监听器,当按钮被点击时,监听器会收到通知。文章来源:https://www.toymoban.com/news/detail-651617.html
这些只是一些例子,观察者模式在许多框架和应用中都有广泛的应用。它提供了一种松耦合的方式,允许不同部分的代码能够在发生变化时保持同步,从而实现更加灵活和可维护的程序。文章来源地址https://www.toymoban.com/news/detail-651617.html
到了这里,关于深入理解设计模式-行为型之观察者的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!