设计模式之观察者模式

Java版本

public class WeatherSubject extends Observable {

   private String content;

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
        super.setChanged();
        // 拉模式
        // this.notifyObservers();
        // 推模式
        super.notifyObservers(content);
    }


}

public class AObserver implements Observer {

    private String observerName;

    @Override
    public void update(Observable o, Object arg) {

        System.out.println(observerName + " --推模式收到->" + arg);
        // 拉的方式
        System.out.println(observerName + " --拉模式->" + ((WeatherSubject) o).getContent());

    }

    public String getObserverName() {
        return observerName;
    }

    public void setObserverName(String observerName) {
        this.observerName = observerName;
    }
}


public static void main(String[] args) {

        WeatherSubject2 subject2 = new WeatherSubject2();

        AObserver aObserver = new AObserver();
        aObserver.setObserverName("黄明的女朋友");

        AObserver bObserver = new AObserver();
        bObserver.setObserverName("黄明的老妈");

        // 注册观察者
        subject2.addObserver(aObserver);
        subject2.addObserver(bObserver);

        subject2.setContent("天气很好啊~~~~~~~~~~~");
    }

Springboot版本

// 事件对象 设置事件源
public class CustomEvent extends ApplicationEvent {

    private MessageEntity messageEntity;

    public CustomEvent(Object source,MessageEntity messageEntity) {
        super(source);
        this.messageEntity = messageEntity;
    }

    public MessageEntity getMessageEntity() {
        return this.messageEntity;
    }
}

// 事件消息
public class MessageEntity {

    private String message;

    private String code;

    public MessageEntity(String message, String code) {
        this.message = message;
        this.code = code;
    }
    // get and set
    
}

// 事件监听者1
@Component
public class CustomEventListener implements ApplicationListener<CustomEvent> {
 @Override
 public void onApplicationEvent(CustomEvent event) {
     // 业务逻辑处理
      System.out.println("event = " + event);
  }
}

// 事件监听者2
@Component
public class CustomEventListener2 implements ApplicationListener<CustomEvent> {
   @Override
    public void onApplicationEvent(CustomEvent event) {
        // 业务逻辑处理
        System.out.println("event2 = " + event);
    }
}
// 事件监听者3
@Component
public class CustomEventListener3 {
    @EventListener(condition = "#event.messageEntity.code == 'code'")
    public void onApplicationEvent(CustomEvent event) {
        // 业务逻辑处理
        System.out.println("event3 = " + event);
    }
}

// 发布者测试
@RestController
@ResponseBody
public class CustomApplicationEventPublisher {
    @Autowired
    ApplicationEventPublisher eventPublisher;

    @GetMapping("/push")
    public String push(String code,String message) {
        eventPublisher.publishEvent(new CustomEvent(this, new MessageEntity("msg","code")));
        return "事件发布成功!";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值