DavidZambrano226 / space-invader-game-java

1 stars 0 forks source link

Patron Estructural 3 - Facade #20

Open malejaip opened 1 year ago

malejaip commented 1 year ago

Este patrón puede ser útil para separar los hilos que se utilizan en el método principal (main) de una aplicación, ya que ayuda a encapsular la complejidad de los hilos en una interfaz más simple y fácil de usar.

En muchas aplicaciones, los hilos pueden ser una fuente de complejidad, especialmente cuando se utilizan múltiples hilos para realizar tareas en paralelo. Al separar los hilos detrás de una fachada (facade), se puede proporcionar una interfaz más simple y fácil de usar a los desarrolladores que trabajan en la aplicación, lo que puede reducir la complejidad y el tiempo necesario para desarrollar nuevas funcionalidades.

Además, al separar los hilos detrás de una fachada, se puede mejorar la escalabilidad y la mantenibilidad de la aplicación. Si los hilos están acoplados directamente al método principal, cualquier cambio en los hilos puede tener un impacto en todo el método principal. Al encapsular los hilos detrás de una fachada, los desarrolladores pueden trabajar en los hilos de manera más aislada y separada del resto de la aplicación, lo que puede reducir el riesgo de introducir errores o causar impacto no deseado en otras partes del código.

En resumen, el patrón de diseño Facade puede ser una buena práctica para separar los hilos que se utilizan en el método principal de una aplicación, ya que ayuda a encapsular la complejidad de los hilos en una interfaz más simple y fácil de usar, mejora la escalabilidad y la mantenibilidad de la aplicación, y reduce el riesgo de introducir errores o causar impacto no deseado en otras partes del código.

malejaip commented 1 year ago
public class SpaceInvaderDisposeFacade {

    private HiloEnemigos hilitoEnemigo;

    private HiloDisparoJugador hilitoDisparo;

    private HiloDisparoEnemigos hilitoEnemigoDisparo;

    private HiloAnimacionEnemigos hilitoAnimacion;
    private HiloAuxiliarCreaDisparo hilitoAuxiliar;

    private SpaceInvaders mundo;

    private InterfazSpaceInvaders instance;

    public void startHiloEnemigo(SpaceInvaders mundo, InterfazSpaceInvaders instance) {
        for (int i = 0; i < mundo.getPartidaActual().getEnemigos().length; i++) {
            for (int j = 0; j < mundo.getPartidaActual().getEnemigos()[0].length; j++) {
                if (mundo.getPartidaActual().getEnemigos()[i][j] != null) {
                    hilitoEnemigo = new HiloEnemigos(mundo.getPartidaActual().getEnemigos()[i][j], instance);
                    hilitoEnemigo.start();
                }
            }
        }
    }

    private void startHiloAuxiliar( SpaceInvaders mundo, InterfazSpaceInvaders instance) {
        hilitoAuxiliar = new HiloAuxiliarCreaDisparo(mundo.getPartidaActual(), instance);
        hilitoAuxiliar.start();
    }

    private void startHiloAnimacion(SpaceInvaders mundo, InterfazSpaceInvaders instance) {
        for (int i = 0; i < mundo.getPartidaActual().getEnemigos().length; i++) {
            for (int j = 0; j < mundo.getPartidaActual().getEnemigos()[0].length; j++) {
                if (mundo.getPartidaActual().getEnemigos()[i][j] != null) {
                    hilitoAnimacion = new HiloAnimacionEnemigos(mundo.getPartidaActual().getEnemigos()[i][j], instance);
                    hilitoAnimacion.start();
                }
            }
        }
    }

    private void startHiloDisparoEnemigo(SpaceInvaders mundo, InterfazSpaceInvaders instance) {
        hilitoEnemigoDisparo = new HiloDisparoEnemigos(mundo.getPartidaActual(), instance, mundo);
        hilitoEnemigoDisparo.start();
    }

    private void startHiloJugador(SpaceInvaders mundo, InterfazSpaceInvaders instance) {
        hilitoDisparo = new HiloDisparoJugador((NaveJugador) mundo.getJugadorActual(), instance,
                mundo.getPartidaActual().getEnemigos(), mundo.getPartidaActual());
        hilitoDisparo.start();
    }

    public void startKeyboardPlayer() {
        startHiloJugador(this.mundo,this.instance);
    }

    public void iniciarJuego(SpaceInvaders mundo, InterfazSpaceInvaders instance) {
        this.mundo = mundo;
        this.instance = instance;
        startHiloAuxiliar(mundo, instance);
        startHiloEnemigo(mundo, instance);
        startHiloAnimacion(mundo, instance);
        startHiloDisparoEnemigo(mundo, instance);
        startHiloJugador(mundo, instance);
    }

    public void detenerJuego() {
          hilitoAuxiliar.interrupt();
        hilitoDisparo.interrupt();
        hilitoEnemigoDisparo.interrupt();
        hilitoEnemigo.interrupt();
    }

}