2011-06-10 16 views
5

Hemos estado discutiendo en mi lugar de trabajo sobre el uso del patrón Observer para uno de los problemas. De alguna manera huelo el "uso excesivo" pero estoy abierto a las ideas. Por lo tanto, el requisito esPatrón de observador: cuando a

Tenemos una jerarquía de objetos -> un pedido y varias líneas de pedido en el pedido. Cuando se cancela el pedido, todas las líneas de pedido deben cancelarse.

Para hacer esto, hemos creado una clase OrderCancel que es el Sujeto en el idioma del patrón Observer y la clase LineItemCancel que es el Observer. También tenemos una clase OrderManager con un método cancelOrders (pedidos de lista) que instancia el OrderCancel y los objetos LineItemCancel correspondientes y luego los registra en el OrderCancel. El código es el siguiente.

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() { 
    } 
} 

estoy convencido de que esto es un uso inadecuado. Pero no puedo convencer a los diseñadores de esta clase. Estoy tratando de averiguar si esto es correcto ya que el diseñador es uno de los arquitectos en el trabajo.

Esperamos escuchar sus pensamientos.

+0

¿Un artículo solo puede estar relacionado con un pedido? –

Respuesta

2

El patrón Observer solo es útil cuando reduce el acoplamiento. No veo ninguna reducción del acoplamiento en este ejemplo, así que diría que es uso excesivo.

2

Estoy de acuerdo con @Pace, definitivamente no reduce el acoplamiento, definitivamente uso excesivo. Mi pregunta es que en su ejemplo, el enfoque más simple es que la orden cancele sus propios artículos de línea cuando la cancela; ¿Hay alguna buena razón para no hacer eso para tu aplicación?

Cuestiones relacionadas