侧边栏壁纸
  • 累计撰写 793 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

观察者模式(Observer Pattern)

Dettan
2021-04-10 / 0 评论 / 0 点赞 / 163 阅读 / 258 字
温馨提示:
本文最后更新于 2022-07-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
就是 发布→订阅

例子:基于SpringBoot实现的
自动注册
OrderObservable
一个可被观察的对象
@Data
public class OrderObservable extends ApplicationEvent {
    /**
     * 设置抽象主题内容
     * @param source
     */
    private String message;
    public OrderObservable(Object source,String message) {
        super(source);
        this.message = message;
    }

    @Override
    public Object getSource() {
        return super.getSource();
    }
}
EmailListener
观察者1
/**
 * @author administrator
 */
@Slf4j
@Component
public class EmailListener implements ApplicationListener<OrderObservable> {
    @Override
    @Async
    public void onApplicationEvent(OrderObservable orderObservable) {
        log.info(Thread.currentThread() + "用户下单成功!手机收到邮件!内容为{}", orderObservable.getMessage());
    }
}
SmsListener
观察者2
/**
 * @author administrator
 */
@Slf4j
@Component
public class SmsListener implements ApplicationListener<OrderObservable> {
    @Override
    @Async
    public void onApplicationEvent(OrderObservable orderObservable) {
        log.info(Thread.currentThread() + "用户下单成功!手机收到短信!内容为{}", orderObservable.getMessage());
    }
}
ObserverController
网页接口
@RestController
public class ObserverController {
    @Autowired
    private ApplicationContext applicationContext;

    @GetMapping("test")
    public String test() {
        OrderObservable order = new OrderObservable(this, "用户下单成功");
        applicationContext.publishEvent(order);
        return "success";
    }
}
ObserverApp
SpringBoot启动类
@SpringBootApplication
@EnableAsync
public class ObserverApp {
    public static void main(String[] args) {
        SpringApplication.run(ObserverApp.class, args);
    }
}
测试 注意项目端口http://localhost:8088/test
思想来源
0

评论区