java设计模式之观察者模式及springboot应用
1.介绍
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。一般是多个观察者观察一个被观察者。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。也叫订阅-发布模式,监听器模式。
2.场景
当用户注册以后,需要给用户发送邮件,发送优惠券等操作
使用观察者模式之后
3.实现
观察者模式使用三个类 Subject、Observer 和 Client。Subject 对象带有绑定观察者到 Client 对象和从 Client 对象解绑观察者的方法。我们创建 Subject 类、Observer 抽象类和扩展了抽象类 Observer 的实体类。ObserverPatternDemo,我们的演示类使用 Subject 和实体类对象来演示观察者模式。
3.1 创建Subject类
import java.util.ArrayList; import java.util.List; public class Subject { private List<Observer> observers = new ArrayList<Observer>(); private int state; public int getState() { return state; } public void setState(int state) { this.state = state; notifyAllObservers(); } public void attach(Observer observer){ observers.add(observer); } public void notifyAllObservers(){ for (Observer observer : observers) { observer.update(); } } }
3.2 创建Observer类
public abstract class Observer { protected Subject subject; public abstract void update(); }
3.3 创建实体观察者类
public class BinaryObserver extends Observer{ public BinaryObserver(Subject subject){ this.subject = subject; this.subject.attach(this); } @Override public void update() { System.out.println( "Binary String: " + Integer.toBinaryString( subject.getState() ) ); } }
3.4 使用 Subject 和实体观察者对象
public class ObserverPatternDemo { public static void main(String[] args) { Subject subject = new Subject();
new BinaryObserver(subject); System.out.println("First state change: 15"); subject.setState(15); System.out.println("Second state change: 10"); subject.setState(10); } }
3.5 输出结果
First state change: 15 Binary String: 1111 Second state change: 10 Binary String: 1010
4.springboot应用
Spring的事件机制主要由3个部分组成。
ApplicationEvent:通过继承它,实现自定义事件。另外,通过它的 source 属性可以获取事件源,timestamp 属性可以获得发生时间。
ApplicationEventPublisher:通过实现它,来发布变更事件。
ApplicationEventListener:通过实现它,来监听指定类型事件并响应动作。
4.1定义事件
定义事件,继承 ApplicationEvent
的类成为一个事件类
4.2发布事件
发布事件,通过 ApplicationEventPublisher
发布事件
4.3监听事件
监听并处理事件,实现 ApplicationListener
接口或者使用 @EventListener
注解