Aplicar el patrón Observer para desacoplar la gestión de eventos en Board
Descripción
Actualmente, la clase Board concentra tanto la detección de los principales eventos del juego, como el consumo de una manzana (checkApple) y las colisiones (checkCollision), como la ejecución de todas las acciones que estos generan. Esto provoca un alto acoplamiento y dificulta la incorporación de nuevos comportamientos sin modificar la clase.
Comportamiento actual
La clase Board detecta los eventos del juego y ejecuta directamente las acciones asociadas, como actualizar el puntaje, mostrar preguntas o finalizar la partida. De esta manera, cualquier nueva reacción ante un evento requiere modificar la implementación de Board.
Propuesta de solución
Se propone aplicar el patrón de diseño Observer, convirtiendo a Board en el sujeto (Subject) encargado únicamente de detectar los eventos y notificar su ocurrencia. Para ello, la clase debería:
- Implementar la interfaz
Subject.
- Incorporar los métodos
attach(), detach() y notifyObservers().
- Mantener una colección de observadores registrados.
- Crear la interfaz
Observer con el método update().
- Delegar las acciones específicas a observadores como
ScoreObserver, QuestionObserver y GameOverObserver.
Beneficios
- Reduce el acoplamiento entre la detección de eventos y las acciones que estos generan.
- Permite agregar nuevos comportamientos sin modificar la clase
Board.
- Favorece el cumplimiento del principio Open/Closed.
- Mejora la mantenibilidad y extensibilidad del sistema.
- Facilita la reutilización de la lógica asociada a cada evento.
Patrón de diseño

Aplicar el patrón Observer para desacoplar la gestión de eventos en
BoardDescripción
Actualmente, la clase
Boardconcentra tanto la detección de los principales eventos del juego, como el consumo de una manzana (checkApple) y las colisiones (checkCollision), como la ejecución de todas las acciones que estos generan. Esto provoca un alto acoplamiento y dificulta la incorporación de nuevos comportamientos sin modificar la clase.Comportamiento actual
La clase
Boarddetecta los eventos del juego y ejecuta directamente las acciones asociadas, como actualizar el puntaje, mostrar preguntas o finalizar la partida. De esta manera, cualquier nueva reacción ante un evento requiere modificar la implementación deBoard.Propuesta de solución
Se propone aplicar el patrón de diseño Observer, convirtiendo a
Boarden el sujeto (Subject) encargado únicamente de detectar los eventos y notificar su ocurrencia. Para ello, la clase debería:Subject.attach(),detach()ynotifyObservers().Observercon el métodoupdate().ScoreObserver,QuestionObserveryGameOverObserver.Beneficios
Board.Patrón de diseño