Foros del Web » Programación para mayores de 30 ;) » Programación General »

Patrones de Diseño: State vs Strategy

Estas en el tema de Patrones de Diseño: State vs Strategy en el foro de Programación General en Foros del Web. Buenas, mi idea es encontrar diferencias y aplicacion de estos dos patrones de diseño. Gracias...
  #1 (permalink)  
Antiguo 13/05/2008, 07:28
 
Fecha de Ingreso: diciembre-2007
Mensajes: 5
Antigüedad: 16 años, 4 meses
Puntos: 0
Patrones de Diseño: State vs Strategy

Buenas, mi idea es encontrar diferencias y aplicacion de estos dos patrones de diseño. Gracias
  #2 (permalink)  
Antiguo 13/05/2008, 20:33
Avatar de SidP  
Fecha de Ingreso: febrero-2006
Ubicación: /etc/php.ini
Mensajes: 129
Antigüedad: 18 años, 2 meses
Puntos: 2
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
  #3 (permalink)  
Antiguo 15/05/2008, 10:13
venkman
Invitado
 
Mensajes: n/a
Puntos:
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".
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:41.