私たちは、問題の1つにオブザーバーパターンを使用することについて、私の職場で前後に議論してきました。私はどういうわけか「使いすぎ」のにおいがしますが、アイデアにはオープンです。したがって、要件は
オブジェクトの階層->注文と注文内の複数のラインアイテムがあります。注文をキャンセルする場合は、すべての広告申込情報をキャンセルする必要があります。
これを行うために、オブザーバーパターンイディオムのサブジェクトであるOrderCancelクラスと、オブザーバーであるLineItemCancelクラスを作成しました。また、CancelOrders(Listorders)メソッドを持つ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() {
}
}
これは不適切な使用法であると私は確信しています。しかし、私はこのクラスの設計者を説得することはできません。デザイナーは仕事をしている建築家の一人なので、これが正しいかどうか自分で考えようとしています。
あなたの考えを聞くのを楽しみにしています。