观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
/**
* 定义一个订单事件
*/
public class OrdersEvent extends ApplicationEvent {
public OrdersEvent(Object source) {
super(source);
}
}
/**
* 监听订单事件,发送短信
*/
@Component
public class SmsListener implements ApplicationListener<OrdersEvent> {
@Override
public void onApplicationEvent(OrdersEvent ordersEvent) {
System.out.println("发送短信成功");
}
}
/**
* 监听订单事件,发送邮件
* SmartApplicationListener 可以定义执行顺序
*/
@Component
public class EmailListener implements SmartApplicationListener {
@Override
public boolean supportsEventType(Class<? extends ApplicationEvent> aClass) {
return false;
}
@Override
public boolean supportsSourceType(Class<?> sourceType) {
return false;
}
@Override
public int getOrder() {//定义执行顺序 数字越小越优先执行
return 0;
}
@Override
public void onApplicationEvent(ApplicationEvent applicationEvent) {
System.out.println("发送邮件");
}
}
public class OrdesServiceImpl implements OrdersService {
@Autowired
ApplicationContext applicationContext;
/**
*利用观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
*
*/
@Override
public void addOrders() {
System.out.println("下订单成功");
OrdersEvent ordersEvent = new OrdersEvent("参数");
//发布一个事件
applicationContext.publishEvent(ordersEvent);
// System.out.println("发送短信成功");
// System.out.println("发送邮件成功");
}
}
发布订单事件后,通过两个监听器可以自动实现发送短信和邮件的逻辑。