Diseño general
La imagen muestra los aspectos mas interesantes de nuestro framework ejemplo. Nos interesan particularmente las clases GameBoard (el tablero del juego) y Robot. Los pasos básicos para construir un juego con nuestro framework son:
1) se instancia el GameBoard (lo que resultará en la instanciación y configuración de muchos otros objetos que hacen al frozenspot del framework).
2) se instancian varios Robots y se agregan al juego enviando el mensaje addRobot() al gameBoard.
3) se inicia el juego enviando al gameBoard el mensaje runUntilStopped() . Si se quiere detener el juego se envía al gameBoard el mensaje stop(). Alternativamente se puede activar el juego solo por un determinado numero de pasos enviando al gameBoard el mensaje runForCycles(int n).
El método plantilla
En cada paso del juego (cada ciclo) el gameBoard recorre su colección de robots y a cada uno le envía el mensaje step(). Note que el método step() es donde se garantiza que el robot efectúe las acciones establecidas en las reglas del juego (frozenspot), en el orden establecido.
Pensando en el patron de diseño "método plantilla" uno podría implementar variantes de robots subclalsificando la clase Robot y redefiniendo los métodos move(), consumeBattery(), y fireArms(). De hecho, cada uno de estos métodos hace posible la implementación de uno de nuestros hostspots (recuerde que no siempre un hotspot se corresponde/implementa con un método o una clase, pero casualmente eso es lo que ocurre en nuestro diseño ejemplo)
Subclasificar es una de las alternativas de diseño posibles cuando se utiliza la estrategia de la plantilla y los hooks para separar lo que se mantiene constante (fronzenspot) de lo que varía (los hotspots). La otra estrategia es separar lo constante de lo que cambia componiendo objetos. A continuación veremos en detalle ambas alternativas.
Obra publicada con Licencia Creative Commons Reconocimiento Compartir igual 4.0