Skip to content

Incorporacion de algunos patrones de diseño #6

@nhn2004

Description

@nhn2004

Al revisar el código del proyecto, he identificado oportunidades para mejorar la arquitectura mediante la aplicación de patrones de diseño. Esto ayudará a optimizar la mantenibilidad, extensibilidad y legibilidad del código. A continuación, detallo tres patrones de diseño que podrían aplicarse, junto con sus justificaciones:

  1. Patrón Facade
    Ubicación:
    Actualmente, la clase Main interactúa directamente con ImagesLoader, SoundsLoader y ImagesEffects para la carga de imágenes, sonidos y efectos gráficos. Esto genera una alta dependencia entre estas clases y dificulta la modificación o ampliación de las operaciones relacionadas con recursos.

Propuesta:
Implementar una clase ResourceFacade que encapsule estas interacciones y proporcione una interfaz simplificada para realizar operaciones como cargar imágenes, reproducir sonidos o aplicar efectos.

Beneficios:

Encapsulación: Reduce el acoplamiento entre Main y las clases de recursos.
Claridad: Simplifica la lógica de la clase principal al delegar responsabilidades en una fachada.
Extensibilidad: Facilita agregar nuevas funcionalidades relacionadas con recursos en un único lugar.

999Imagen1

  1. Patrón Observer
    Ubicación:
    El evento de recolección de monedas en Coin se maneja utilizando una variable estática (COINS_CATCHED) compartida con Main. Esto genera una dependencia rígida y no permite un manejo escalable de eventos.

Propuesta:
Aplicar el patrón Observer, donde Main se registre como observador de eventos generados por Coin. Cuando una moneda sea recolectada, se notificará a Main sin necesidad de depender de variables globales.

Beneficios:

Desacoplamiento: Elimina la dependencia directa entre Main y Coin.
Escalabilidad: Permite añadir nuevos observadores o eventos relacionados sin modificar las clases existentes.
Reusabilidad: Hace que las clases sean más genéricas y fáciles de usar en otros contextos.

999Imagen2

  1. Patrón Iterator
    Ubicación:
    Actualmente, la clase Main accede directamente a la lista players en Map para iterar sobre los jugadores y gestionar eventos como pulsaciones de teclas.

Propuesta:
Crear una implementación de Iterator para Map, permitiendo a Main iterar sobre los jugadores sin exponer la estructura interna de la lista.

Beneficios:

Encapsulación: Protege la estructura interna de la lista de jugadores en Map.
Flexibilidad: Facilita cambios en la estructura de datos sin impactar las clases que la consumen.
Legibilidad: Simplifica la interacción con la lista al proporcionar un mecanismo de iteración controlado.

999Imagen3

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions