我们一直在我的工作场所就使用观察者模式来解决其中一个问题争论不休。我以某种方式闻到“过度使用”的味道,但对想法持开放态度。所以要求是
我们有一个对象层次结构 -> 一个订单和订单中的多个订单项。当订单被取消时,所有的订单项都需要被取消。
为此,我们创建了一个 OrderCancel 类,它是 Observer 模式习语中的 Subject 和 LineItemCancel 类,它是 Observer。我们还有一个带有 cancelOrders(List orders) 方法的 OrderManager 类,该方法实例化 OrderCancel 和相应的 LineItemCancel 对象,然后将它们全部注册到 OrderCancel 中。代码如下。
public class OrderManager {
public void cancelOrders(List<Order> orders){
for(Order order :orders){
OrderCancel orderCancel = new OrderCancel(order);
Listener listener = new LineItemCancel(order);
orderCancel.addListeners(listener);
orderCancel.cancel();
}
}
}
public class OrderCancel implements Subject {
private List<Listener> listeners = new ArrayList<Listener>();
private Order order;
public OrderCancel(Order order) {
this.order = order;
}
@Override
public void addListeners(Listener listener) {
listeners.add(listener);
}
@Override
public void notifyListeners() {
for(Listener listener : listeners){
listener.update();
}
}
public void cancel() {
notifyListeners();
cancelOrder();
}
private void cancelOrder() {
}
}
public class LineItemCancel implements Listener {
private Order order;
public LineItemCancel(Order order) {
this.order = order;
}
@Override
public void update() {
cancelLineItem();
}
private void cancelLineItem() {
}
}
我确信这是不恰当的使用。但我无法说服这门课的设计师。我试图弄清楚这是否正确,因为设计师是工作中的建筑师之一。
期待听到你的想法。