• 设计模式(二) --- 使用监听驱动实现观察者模式


    一、实现观察者模式:

      1、继承 ApplicationEvent 类, 定义需要发布的事件类;

      2、实现 ApplicationListener 接口(或者使用 @EventListener)监听事件;

      3、使用 ApplicationEventPublisher 发布定义的事件类

    二、实现

    1、继承 ApplicationEvent 类, 定义需要发布的事件类;

          定义订单事件

    public class OrderEvent extends ApplicationEvent {
        public OrderEvent(Object source) {
            super(source);
        }
    }
    

      

    2、实现 ApplicationListener 接口(或者使用 @EventListener)监听事件;

    2.1、发微信

    // 订单事件的监听器
    @Component // 交给spring托管
    public class WxListener implements ApplicationListener<OrderEvent> {
        @Override
        public void onApplicationEvent(OrderEvent event) {
            // 3 --- 发送微信通知 ----
            System.out.println("3. 发送微信消息");
        }
    }
    

    2.2、发短信

    // 订单事件的监听器
    @Component // 交给spring托管 -- 创建对象并且保留在IOC容器
    public class SmsListener implements ApplicationListener<OrderEvent> {
        @Override
        public void onApplicationEvent(OrderEvent event) {
            // 2 --- 发送短信 --- TODO 此处省略短信接口调用的N行代码
            System.out.println("2、 短信发送成功");
        }
    }
    

    3、定义发布类

    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Component;
    
    import com.jm.listener.event.OrderEvent;
    
    @Component
    public class MyPublisher implements ApplicationContextAware {
    
    	private ApplicationContext applicationContext;
    
    	@Override
    	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    		this.applicationContext = applicationContext;
    	}
    
    	public void publisherEvent(OrderEvent orderEvent) {
    		System.out.println("---开始发布 orderEvent 事件---");
    		applicationContext.publishEvent(orderEvent);
    	}
    
    }
    

      

    测试:

    在 service 中使用

    @Service
    public class TestServiceImpl implements TestService {
    
    	@Autowired
        private MyPublisher myPublisher;
    	
    	@Override
    	public boolean test() {
    
    		System.out.println("============send message test=============");
    		OrderEvent orderEvent = new OrderEvent("参数");
    		myPublisher.publisherEvent(orderEvent);
    		return true;
    	}
    
    }
    

      

    github: https://github.com/szjomin/observerPattern

     ----------------------------------------------------

    参考:https://www.cnblogs.com/jmcui/p/11054756.html

      

  • 相关阅读:
    .net调用存储过程详解
    SQL SERVER 与ACCESS、EXCEL的数据转换
    dedecms 织梦 获取文章链接地址
    用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等
    SQL Server触发器创建、删除、修改、查看示例步骤
    (后缀数组模板)BZOJ1031[JSOI2007]字符加密Cipher
    LOJ2055「TJOI / HEOI2016」排序
    BZOJ1096[ZJOI2007]仓库建设
    POI2011Meteors
    数位dp(1)
  • 原文地址:https://www.cnblogs.com/Jomini/p/13047311.html
Copyright © 2020-2023  润新知