Implementación del patrón Comando en Java

Los patrones de diseño en el área del software son soluciones generalmente aceptadas a problemas comunes que permiten lograr la mayor efectividad y reutilización en la construcción de la solución. Por lo tanto un buen ingeniero de Software debería conocerlos y aplicarlos en sus dia a dia.

El patrón Comando es un patrón de comportamiento que permite desacoplar completamente la comunicación entre un objeto que solicita ejecutar una operación y el objeto que la ejecuta.

Para su implementación simplemente definimos una interface Comando con un método ejecutar
, la idea es que esta interfaz es la que nos va a permitir de intermediario entre el objeto que envía la solicitud y el objeto que la ejecuta.

En el primer ejemplo modelaremos la comunicación entre un interruptor y un bombillo o ventilador, el interruptor debe prender el bombillo pero todo esto lo hace a través de un objeto intermedio( Comando) lo que permite que el interruptor no tenga ningún conocimiento del objeto real que ejecuta la operación, simplemente el sabe invocar la operación a través de una interfaz muy bien definida.

El siguiente diagrama ilustra el desacoplamiento entre los objetos.


Codigo fuente ejemplo 1


En el segundo caso vamos a implementar un servidor  de transacciones con dos operaciones básicas: sumar y restar.  En este caso usamos el mecanismo de carga dinámica de clases en Java:


El siguiente es el diagrama de clases del servidorr de transacciones, en este caso podemos agregar nuevas operaciones simplemente extendiendo la clase ComandoTransaccion y agregando una operación en el receptor de comandos ReceptorComandos.

La clase Comanndo es la clase base de la jerarquía e implementa un comando genérico con una  operación de ejecutar, la clase ComandoTransaccion se encarga de recibir una lista de comandos y de sus argumentos y se encarga de invocar correctamente al comando específico(usando carga dinámica de clases). La clase que se encarga de realizar las operaciones es ReceptorComandos por lo tanto las clases ComandoSuma y ComandoResta simplemente la invocan.



De esta forma tenemos un servidor fácilmente extensible siguiendo el patrón Comando.

Codigo fuente ejemplo 2

Me basé en un artículo disponible en la web basado en las notas de clase de el profesor William E. Fairfield  de la universidad de California. Aunque tuve que hacer algunos ajustes (En el ejemplo usaban la clase Vector que esta en desuso (deprecated) la reemplaze con un ArrayList, además para la carga dinámica usé el ruta completa al nombre de la clase para poder trabajar con paquetes (fully qualified class name) y no tener todas las clases definidas en el mismo lugar, esto fue más pensando en el tema de organización! )

http://www.javaworld.com/article/2077569/core-java/java-tip-68--learn-how-to-implement-the-command-pattern-in-java.html







Comentarios

Entradas populares