salluzziluca / TP1-Algo3

1er TP de la materia Algoritmos y Programacion III de la Facultad de de Ingeniería de la Universidad de Buenos Aires
0 stars 0 forks source link

Duda sobre el cambio de escena y el observer #30

Closed salluzziluca closed 1 year ago

salluzziluca commented 1 year ago

Actualmente, el observer funciona asi. Cuando se toca el boton, la escena le pasa al controlador nombre y mazo elegido https://github.com/salluzziluca/TP1-Algo3/blob/3a55aa3e7864e4fd05bae9c25848611581a81aaa/src/main/java/view/BuilderEscenaInicio.java#L32-L37 Luego, el controlador los recibe y los asigna, cuando se llega a 2 jugadores, se cambia de escena. https://github.com/salluzziluca/TP1-Algo3/blob/3a55aa3e7864e4fd05bae9c25848611581a81aaa/src/main/java/controller/Juego.java#L45-L63 Teniamos miedo de estar haciendo cualquiera, asi que queria chequear que esto sea "correcto", gracias!

dessaya commented 1 year ago

Si bien funciona, hay dos "problemas":

1) No corresponde al patrón Observer ya que el BuilderEscenaInicio sabe exactamente a quién le está mandando el mensaje (a Juego).

2) Hay una dependencia cíclica: en Juego hay un import BuilderEscenaInicio y en BuilderEscenaInicio hay un import Juego.

Lo correcto sería que haya una interfaz en el medio:

class BuilderEscenaInicio {
  interface ObservadorNombreYMazo {
    void recibirNombreYMazo(...);
  }

  // puede ser uno solo en lugar de una lista si no es necesario soportar múltiples observadores
  List<ObservadorNombreYMazo> observadores;

  public void suscribir(ObservadorNombreYMazo o) { observadores.add(o); }

  public Scene crearEscena() {
     ...
     botonContinuar.setOnAction(e -> { 
         for (var o : observadores) {
             o.recibirNombreYMazo(...); 
         }
     });
     ... 
  }  
}
salluzziluca commented 1 year ago

Excelente, se entendio perfecto, gracias