我們一直在我的工作地點來回討論使用Observer模式來解決其中一個問題。我以某種方式聞到「過度使用」,但對想法持開放態度。所以要求是觀察者模式 - 什麼時候到
我們有一個對象的層次結構 - >順序和訂單中的多個行項目。訂單取消時,所有訂單項都需要取消。
爲此,我們創建了一個OrderCancel類,它是觀察者模式習語中的主語,是觀察者的LineItemCancel類。我們還有一個帶有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() {
}
}
我相信這是使用不當造成的。但我無法說服這個班的設計師。如果這是正確的,我正試圖弄清楚自己,因爲設計師是工作中的建築師之一。
期待聽到你的想法。
一個項目只能與一個訂單相關? – 2011-06-10 14:12:38