实际开发中常用的设计模式--------观察者模式(知识跟业务场景结合)-----小白也能看懂(通俗易懂版本)

观察者模式

1.什么是观察者模式?
观察者模式------它用于在对象之间建立一种一对多的依赖关系,使得当一个对象状态发生改变时,所有依赖于它的对象都能够自动收到通知并进行相应的更新操作
2.业务场景

观察者模式实现:
1.一个被观察者的类Observerable ;
2.多个观察者Observer ;
3.观察者的差异化实现

在一个电商网站中,当用户下单成功后,需要通知仓库系统准备发货、通知物流系统安排配送、通知财务系统进行结算等等。这些不同的子系统都需要对订单状态进行监听,并在订单状态改变时做出相应的处理。

相应代码:

// 定义订单类
public class Order {
    private String orderId;
    private int status;

    // 订单状态改变时通知所有观察者
    public void setStatus(int status) {
        this.status = status;
        notifyObservers();
    }

    // 注册观察者
    public void attachObserver(Observer observer) {
        observers.add(observer);
    }

    // 移除观察者
    public void detachObserver(Observer observer) {
        observers.remove(observer);
    }

    // 通知所有观察者
    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(this);
        }
    }
}

// 定义观察者接口
public interface Observer {
    void update(Order order);
}

// 定义仓库系统类作为一个观察者
public class WarehouseSystem implements Observer {
    
    @Override
    public void update(Order order) {
        if (order.getStatus() == 1) { // 如果订单状态为待发货,则准备发货
            prepareDelivery(order.getOrderId());
        }
    }

   // 准备发货逻辑
   private void prepareDelivery(String orderId){
       System.out.println("仓库系统:订单" + orderId + "已准备好发货");
   }
}

// 定义物流系统类作为另一个观察者
public class LogisticsSystem implements Observer {

   @Override
   public void update(Order order) {
       if (order.getStatus() == 2) { // 如果订单状态为待配送,则安排配送
           arrangeDelivery(order.getOrderId());
       }
   }

   // 安排配送逻辑
   private void arrangeDelivery(String orderId){
       System.out.println("物流系统:订单" + orderId + "已安排好配送");
   }
}

解释:
Order 类表示订单对象,其中 attachObserver() 方法和 detachObserver() 方法用于注册和移除观察者,notifyObservers() 方法则会遍历所有已注册的观察者并调用其 update() 方法进行更新操作。

WarehouseSystem 和 LogisticsSystem 分别表示仓库和物流两个子系统,并实现了 Observer 接口以便被注册为 Order 对象的观察者。

当订单状态改变时,会自动调用各个子系统的 update() 方法进行相应的处理

通过使用观察者模式可以将复杂业务逻辑分解成多个独立且可扩展的组件,并且能够有效地降低各组件之间的耦合度

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值