JAVA设计模式-观察者模式

JAVA设计模式-观察者模式

1.观察者模式的定义:
  在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。又称发布订阅模式,减少代码耦合度。
  
2.业务场景:
酒店系统退款中心发起退款通知,不同业务模块酌情处理相关订单。
退款中心为被观察者,推送退款信息;
房间预订业务为观察者,退款业务修改房间状态;
外卖预定业务为观察者,退款业务处理红包等;

避免多个开发人员同时在退款业务中使用if判断订单归属,提交处理业务代码时的冲突。

3.demo代码:

退款中心(被观察者),继承Observable类

public class OrderRefund extends Observable {

    /**
     * 事件发起推送
     * @param orderNum
     */
    public void addRefundRecord(String orderNum) {
        System.out.println(orderNum + "发起了退款");
        setChanged();
        notifyObservers(orderNum);
    }
}

房间业务(观察者1),实现Observer接口

public class RoomObserver implements Observer {
    @Override
    public void update(Observable o, Object arg) {
        String orderNum = (String) arg;
        if (orderNum.startsWith("fj")) {
            System.out.println("房间订单退款");
            System.out.println("房间状态改为空闲");
        } else {
            System.out.println("房间订单不存在");
        }
    }
}

外卖业务(观察者2),实现Observer接口

public class TakeOutObserver implements Observer {
    @Override
    public void update(Observable o, Object arg) {
        String orderNum = (String) arg;
        if (orderNum.startsWith("wm")) {
            System.out.println("退还红包");
            System.out.println("外卖订单退款");
        } else {
            System.out.println("外卖订单不存在");
        }
    }
}

发起退款测试

public class OrderObserverTest {
    public static void main(String[] args) {
        OrderRefund orderRefund = new OrderRefund();
        //注入观察者
        orderRefund.addObserver(new TakeOutObserver());
        orderRefund.addObserver(new RoomObserver());
        //添加退款记录,触发推送
        orderRefund.addRefundRecord("fj16333333");
    }
}

测试结果
在这里插入图片描述
结论:
房间业务和外卖业务都收到退款消息,通过判断进行后续处理。

本文目的仅仅体现观察者模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值