我最近一直在學習觀察者設計模式,并了解像報紙這樣通知訂閱者這樣的規范示例:
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()));
}
}
我在考慮如何將這樣的事情轉化為送餐通知服務,每次送餐都需要單獨通知。例如,當訂單“在路上”、“到貨”等時,交貨狀態會發送更新。有沒有辦法將觀察者問題(或其他設計模式)應用于送餐等通知服務?
可以使用映射將每個交付訂單映射到訂閱者,但這似乎效率低下,因為它很可能是一個 -> 一個關系。
uj5u.com熱心網友回復:
當物件之間存在一對多關系時,通常會使用觀察者可觀察設計模式,因為這種設計模式的基本思想是將可觀察物件的狀態變化通知給正在觀察該可觀察物件的所有觀察者。
但是根據您的問題,存在一對一的關系。(一個訂單 - 一個人)。
但是如果你想使用觀察者設計模式,你可以使用它。然后你的觀察者陣列將只包含一個元素。(只有該特定訂單的所有者)
另一種方式,
當客戶下訂單時,您可以創建一個以客戶物件為屬性的訂單物件。(您可以通過訂單物件的建構式將客戶添加到訂單物件中,在創建時)
那么當訂單物件的狀態發生變化時,
- 您可以使用一種方法來通知客戶。如果您使用一種方法,您可以使用列舉來存盤訂單的可能狀態。然后根據訂單的狀態呼叫相應狀態的方法。
- 您可以有多種方法來通知訂單的每個狀態。這意味著每種狀態都有一種方法。
但我認為第一種方法更好,因為如果您以后必須添加一些額外的狀態,您只需將該狀態添加到列舉中。但是,如果您使用第二種方法,則需要為此添加單獨的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/472802.html
