观察者模式的介绍与实操

定义

   观察者模式又称为 发布订阅模式(这个名称更容易理解)。它指的是,当一个对象的内部状态发生改变时,通知登记过的对象,针对变化做出自己的操作。

   观察者模式作为一种行为型设计模式,主要目的,就是为了把不同的业务行为代码解耦

UML
在这里插入图片描述

Subject:表示某一个主题,定义了添加 / 删除 / 通知 Observe 的功能
PublishSubject:消息发布实现类
Observe:观察者接口,定义了观察者动作的方法,由 Subject 中的 notifyObserves() 方法来通知调用
OneObserve:观察者实现类,完成观察者的动作

实际应用

在Spring中的应用

   在 Spring 中,常用的有一个 ApplicationListener(同 Observe)+ ApplicationEventMulticaster (同 Subject),也是采用观察者模式来处理的。

   我们可以通过实现 ApplicationListener.onApplicationEvent(applicationEvent) 方法,选择不同的 applicationEvent,当完成对应的 applicationEvent 后,发出某些事件动作通知(即执行onApplicationEvent 方法)。

   下面的用例中,通过注册关闭事件,在 Spring 容器销毁 Bean 之前,去关闭手动生成的一个线程池(该实现可参考)。


@Configuration
public class ThreadPoolConfig implements ApplicationListener<ContextClosedEvent> {
	@Override
    public void onApplicationEvent(ContextClosedEvent event) {
        try {
            //saveData2DbThreadPool的关闭,没有被Spring监听到,所以手动告知Bean销毁前关闭ExecutorService
            saveData2DbThreadPool.shutdown();
            saveData2DbThreadPool.awaitTermination(3, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            e.printStackTrace();
            System.out.println("线程 Interrupted 失败");
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值