设计模式之观察者模式

设计模式之观察者模式

在现实开发中我们经常会遇上完成了一个需求后,在二次迭代中又往这个需求中添加了逻辑,比方说编写订单代码时,我们需要保存订单信息,给商家推送订单详情,给用户返回订单交易成果信息等,在下一次的迭代中,甲方爸爸一拍脑袋,还要加一个微信推送的功能,看着本来就一堆长长的代码,我们继续往这个方法上添加功能,会使得我们的代码变得没有扩展性,并且很容易误改了之前的代码,导致原先的功能不能使用,因此就需要我们在不改变原代码的情况下,增强我们代码的功能了,由此我们引入观察者模式。

观察者模式理解

观察者模式存在一对多的关系,也就是在用户的某种行为发生改变的同时需要去触发通知与其相关的多种行为发生改变,这种设计模式同样属于行为模式。

看图说话

在这里插入图片描述

代码组成

根据Spring自带的事件监听功能完成代码编写。
在这里插入图片描述

代码编写

主行为,注入ApplicationContext去发布行为:

@Component
public class SaveOrderService {

    @Autowired
    private ApplicationContext application; 

    public void saveOrder(){
        System.out.println("save order done");

        OrderEvent event = new OrderEvent("param");
        application.publishEvent(event); // 发布行为
    }
}

监听事件,继承ApplicationEvent:

public class OrderEvent extends ApplicationEvent {

    public OrderEvent(Object source) {
        super(source);
    }
}

依赖行为,实现ApplicationListener:

@Component
public class MailListener implements ApplicationListener<OrderEvent> {
    @Override
    public void onApplicationEvent(OrderEvent orderEvent) {
        System.out.println("send mail========="+ orderEvent.getSource().toString());
    }
}

运行结果

@SpringBootTest(classes = DemoApplication.class)
@RunWith(SpringRunner.class)
public class ObserverTest {

    @Autowired
    private SaveOrderService saveOrderService;

    @Test
    public void test(){
        saveOrderService.saveOrder();
    }
}

在这里插入图片描述

扩展

只需要new 一个依赖行为的类实现ApplicationListener就能在不改变原代码的情况下增强原代码的功能啦。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值