Patrón Chain Of Responsibility:
Cadena de Responsabilidad
"Si tenemos una estructura jerárquica, y necesitamos mandar un mensaje, necesitamos un mecanismo en el cual el receptor del mensaje pueda no solo ejecutar la orden, sino también poder comunicar esta a su sub-alterno en el caso de que no fuera dirigida a él"
"Una solución sería ir replicando el patrón “Observador” en cada uno de sus niveles jerárquicos, pero esta no es la solución más optima.."El patrón Chain Of Responsability (Cadena de Responsabilidad), optimiza la solución a este problema.
El esquema del patrón Chain Of Responsibility (Cadena de Responsabilidad) |
Ejemplo: Atacando una posición enemiga.
Tenemos al Capitan Truman, y a los soldados Rambo y Ryan.
El capitan Truman, tiene como orden "tomar posicion enemiga". Se le asigna como subordinado a Rambo.
Y luego a Rambo se le asigna como subordinado el soldado Ryan.
¿como serian las clases?
La estructura del proyecto seria:
La clase Unidad
Las clases que heredan de Unidad:
La clase Capitán:
La clase Soldado:
El programa principal:
Fijaos como Ryan, una vez que se le ha añadido a la jerarquia de mando, a adquirido su orden, usando la función orden() (linea 34 de la clase Unidad de forma recursiva) , ya que si tiene mando (Rambo), busca la orden de su mando, y si no tiene mando, devuelve ("sin ordenes"). Su mando también hace lo mismo, si tiene orden devuelve la orden de su mando (Capitan Truman). Es como si "tirara" hacia atrás el hilo de la jerarquía hasta encontrar su mando.
Vista del programa en ejecución:
Código del ejemplo completo: descargalo en box.com
fuentes:
http://es.wikipedia.org/wiki/Chain_of_Responsibility_(patr%C3%B3n_de_dise%C3%B1o)
http://dukechile.blogspot.com.es/2008/08/el-patrn-cadena-de-responsabilidad.html