Skip to content

Sugerencia uso de Observer #14

Description

@DavoLS-24

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

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions