Comandos para los juegos 2da entrega - PabloFederico/template-tp-grupal GitHub Wiki
En esta segunda entrega los comandos deben ser creados por cada juego particular, donde se le indica su identificador, los componentes sobre los que actua y los cambios de estado que hara sobre estos componentes al ejecutarse. Por ejemplo:
Command openDoor = new Command("open door");
openDoor.setComponent(door);
openDoor.setExecutable("Door", "open");
En 1 estamos creando el comando con su identificador "open door", es decir, que para que el comando sea ejecutado el cliente deberá enviar ese string. Luego, en 2 insertamos como componente un objeto de clase Container, en este caso door y en 3. especificamos el cambio de estado que se hara sobre ese componente, en este caso se cambiara el estado door a "open".
Puede ser que uno quiera que el comando no ejecute simplemente un cambio de estado, para tener mas control sobre esto, existe la posibilidad de definir el comportamiento del comando mediante una funcion lambda. Esto se hace mediante el metodo setExecutableCommand, donde se debe especificar que sucede al ejecutarse el comando. Por ejemplo, si quisieramos que la puerta solo se abra si no tiene cerradura, reemplazariamos 3 por:
openDoor.setExecutableCommand((HashMap<String, Container> components)->
Component door = components.get("door"); if (door.checkStatus("unlocked") ){ door.changeStatus("open") }
);