观察者设计模式是否适用于食品配送状态更新?

Does the Observer Design Pattern Work For Food Delivery Status Updates?

我最近一直在学习 Observer 设计模式,并理解像报纸这样通知订阅者的典型示例:

public class NewsPaper implements Publisher{
    List<Subscriber> subscribers;

    @Override
    public void register(Subscriber s) {
        this.subscribers.add(s);
    }

    @Override
    public void unregister(Subscriber s) {
        this.subscribers.remove(s);
    }

    @Override
    public void update(String type) {
        this.subscribers.forEach(subscriber -> subscriber.update()));
    }
}

我在考虑如何将这样的东西转化为送餐通知服务,每次送餐都需要单独通知。例如,当订单处于“在途”、“到达”等状态时,交付状态将发送更新。有没有办法将观察者问题(或其他设计模式)应用于送餐等通知服务?

可以使用映射将每个交付订单映射到订阅者,但这似乎效率低下,因为它很可能是一对一关系。

通常观察者可观察设计模式在对象之间存在一对多关系时使用,因为这种设计模式的基本思想是通知可观察对象的状态变化给所有正在观察那个可观察对象的观察者

但是根据你的问题有一个一对一的关系。(一个订单-一个人)。

但是如果你想使用观察者设计模式,你可以使用它。 那么您的观察者数组将只包含一个元素。(仅该特定订单的所有者)

另一种方式,

当客户下订单时,您可以使用客户对象 创建一个订单对象作为其属性。 (可以通过订单对象的构造函数将客户添加到订单对象中,创建时

那么当订单对象的状态改变时,

  1. 您可以使用一种方法来通知客户。如果您使用一种方法,您可以使用 enum 来存储订单的可能状态。 然后根据订单的状态可以调用相应状态的方法。
  2. 您可以使用多种方法来通知订单的每个状态。这意味着每个状态一种方法。

但我认为第一种方法更好,因为如果您以后必须添加一些额外的状态,您只需要将该状态添加到枚举中即可。但是,如果您使用第二种方法,则需要为此添加单独的方法。