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.
¿Un artículo solo puede estar relacionado con un pedido? –