| ||||
Re: Patrones de Diseño: State vs Strategy mismo diagrama de clases. misma idea de delegación. El estado es privado del objeto, ningún otro objeto sabe de él. un state define una máquina de estados con sus transiciones. un strategy suele tener un único mensaje público. http://www.google.com.cu/search?aq=f...G=Buscar&meta= Salu2 |
| |||
Re: Patrones de Diseño: State vs Strategy Lo que es diferente es la intención de lo que se hace. El esquema puede ser igual, pero su sentido es bastante distinto. Se usan estados cuando el comportamiento de un objeto depende de algún modo de su situación, cuando su comportamiento varía de una situación a otra. Imagina un horno microondas (con teclas). El comportamiento de la tecla de encendido depende de que antes hayas pulsado ya un tiempo y una temperatura. Si estás en el estado inicial, pulsar encendido no hará nada. Si estás en el estado de ya haber introducido tiempo y potencia, entonces el mismo botón encenderá el horno. El comportamiento del teclado depende de su estado. Se usan Estrategias cuando puedes tener diferentes comportamientos para objetos que por lo demás son iguales. Imagina un horno de nuevo (pero ahora un horno cualquiera). Todos los hornos tienen un botón de encendido, pero en uno de ellos el botón de encender lo que hace es abrir el gas, en otro lo que hace es conectar la corriente a la resistencia, en otro activar el generador de microondas, en otro más antiguo pone a frotar dos palitos (xD)... Todos los objetos horno son más o menos equivalentes, todos calientan lo que haya dentro, pero la forma de hacerlo (con gas, con electricidad, con microondas, con un frotador de palitos (xD)) es diferente. En ambos casos lo que se persigue es encapsular el comportamiento e independizarlo del objeto. Pero en cada caso lo haces por diferentes razones. En el caso del estado porque ese comportamiento puede ir variando y en el caso de la estrategia porque podrías reutilizar el objeto genérico simplemente aplicándole otro comportamiento. En un caso irás asignando diferentes estado con diferentes comportamientos a lo largo del tiempo. En el otro asignarás una u otra estrategia al inicializar el objeto y luego (probablemente) ya no más. Luego hay otras diferencias menores, como que las estrategias en general tienden a ser independientes entre sí. "ActivarMicroondas" no tiene ninguna relación con "AbrirGas". Los estados en general tienden a ser bastante dependientes. El estado "TiempoAceptado" y "PotenciaAceptada" suelen compartir variables de estado (precisamente) y se conocen. Hay una relación que dice que si estoy en "TiempoAceptado" e introduzco la potencia, iré a "PotenciaAceptada". |