设计模式之观察者模式
在现实开发中我们经常会遇上完成了一个需求后,在二次迭代中又往这个需求中添加了逻辑,比方说编写订单代码时,我们需要保存订单信息,给商家推送订单详情,给用户返回订单交易成果信息等,在下一次的迭代中,甲方爸爸一拍脑袋,还要加一个微信推送的功能,看着本来就一堆长长的代码,我们继续往这个方法上添加功能,会使得我们的代码变得没有扩展性,并且很容易误改了之前的代码,导致原先的功能不能使用,因此就需要我们在不改变原代码的情况下,增强我们代码的功能了,由此我们引入观察者模式。
观察者模式理解
观察者模式存在一对多的关系,也就是在用户的某种行为发生改变的同时需要去触发通知与其相关的多种行为发生改变,这种设计模式同样属于行为模式。
看图说话
代码组成
根据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就能在不改变原代码的情况下增强原代码的功能啦。