Мы спорили на моем рабочем месте о том, как использовать шаблон Observer для решения одной из проблем. Я как-то пахну "чрезмерным", но я открыт для идей. Таким образом, требование
У нас есть иерархия объектов -> заказ и несколько позиций в заказе. Когда заказ отменен, все позиции должны быть отменены.
Для этого мы создали класс OrderCancel, который является Subject в идиоме шаблона Observer, и класс LineItemCancel, который является Observer. У нас также есть класс OrderManager с методом cancelOrders (List orders), который создает экземпляр 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() {
}
}
Я убежден, что это неправильное использование. Но я не могу убедить дизайнеров этого класса. Я пытаюсь понять, правильно ли это, так как дизайнер - один из архитекторов на работе.
Жду ваших мыслей.