东庄水利建设公司网站,珠海专业医疗网站建设,wordpress的ico,群晖nas做网站服务器概述
观察者模式#xff08;Observer Pattern#xff09;是一种行为型设计模式#xff0c;它定义了一种一对多的依赖关系#xff0c;让多个观察者对象同时监听一个主题对象#xff0c;当主题对象发生变化时#xff0c;所有依赖于它的观察者对象都会得到通知并更新。
在…概述
观察者模式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 ArrayListObserver 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 FrameworkSpring框架广泛使用观察者模式特别是在事件驱动编程中。例如Spring的事件机制允许你在应用中发布和监听事件当某些事件发生时注册的监听器会收到通知并执行相应的逻辑。 Android开发Android中的事件处理也是观察者模式的应用例如你可以为按钮添加点击事件监听器当按钮被点击时监听器会收到通知。
这些只是一些例子观察者模式在许多框架和应用中都有广泛的应用。它提供了一种松耦合的方式允许不同部分的代码能够在发生变化时保持同步从而实现更加灵活和可维护的程序。