Шаблон наблюдателя - когда

Мы постоянно спорили на моем рабочем месте по поводу использования шаблона Observer для одной из проблем. Я как-то чувствую запах "чрезмерного употребления", но открыт для идей. Итак, требование:

У нас есть иерархия объектов -> заказ и несколько позиций в заказе. Когда заказ отменяется, необходимо отменить все позиции.

Для этого мы создали класс OrderCancel, который является субъектом в идиоме паттерна Observer, и класс LineItemCancel, который является Observer. У нас также есть класс OrderManager с методом cancelOrders (Список заказов), который создает экземпляры 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() {
    }
}

Я убежден, что это неправильное использование. Но я не могу убедить дизайнеров этого класса. Я пытаюсь понять, правильно ли это, поскольку дизайнер - один из архитекторов в работе.

Жду ваших мыслей.

5
задан JNovice 10 June 2011 в 14:02
поделиться