27 Mar
Posted by pecesama as PHP, Programacion, patrones de diseño, php5
Imprimir este post
Continuando con la serie de patrones de diseño en PHP5, veamos ahora uno de los patrones que más me llaman la atención: el strategy pattern (patrón estrategia).
Este patrón se usa generalmente cuando se desea cambiar entre diferentes versiones de un algoritmo. Es decir, si tenemos un código que genera un archivo comprimido, bajo ciertas circunstancias, podemos querer un archivo .ZIP y bajo circunstancias diferentes, queremos crear un archivo .TAR.GZ.
Para implementar este patrón debemos declarar una interface (o bien una clase abstracta) base con un método para el algoritmo, el cual es implementado heredando desde las clases concretas.
En el código de nuestro sistema, debemos decidir cual estrategia concreta es la relevante, la cual debe ser instanciada para ser usada.
El ejemplo que usaré para mostrar este patrón, es la selección del idioma del contenido al abrir una página Web. Por simplicidad, asumiré que si la palabra “es” existe en $_SERVER["HTTP_ACCEPT_LANGUAGE"], estamos frente a un usuario que habla español, de otra forma, estamos frente a un usuario que prefiere el inglés.
El patrón estrategia es usado a menudo al mismo tiempo que el patrón factory, el cual se encargaría de elegir la estrategia correcta. La siguiente entrega vendrá con este patrón.
13 Responses
Diego
March 27th, 2008 at 9:31 pm
1Mmmm puede que yo esté mal, pero según mi inerpretación hay un error en la línea 22, ahi no deberías instanciar a enLang en lugar de esLang?
Arias
March 28th, 2008 at 6:55 am
2Y en vez de un preg_match te sobra con un strpos…
pecesama
March 28th, 2008 at 10:51 am
3tenés razón Diego, error de copiar y pegar, gracias
pecesama
March 28th, 2008 at 11:39 am
4Arias, si definitivamente esa parte se podria haber hecho con funciones de manejo de strings
minijuegos
April 15th, 2008 at 2:25 am
5Gracias por el patrón , buenísimo!
extraño
April 21st, 2008 at 1:43 pm
6muy buen blog, y buena implementación de patrones en php.
pecesama
April 21st, 2008 at 1:57 pm
7gracias extraño bienvenido por aqui
mat
May 25th, 2008 at 10:52 am
8Hola profe, el comentario no es referente al patron, pero tengo problemillas….
Tengo una clase Usuario, y su funcion Almacenar, no marca ningun error, simplemente no guarda en la tabla, le pego la clase para ver si me puede ayudar.
Nombre != “”) & ($this->Apellidos != “”) & ($this->Domicilio != “”) &($this->Mail != “”)&($this->Contraseña != “”))
{
require_once(”conexion.php”);
$Con = new Conexion(”root”,”mat”);
$Con->connectclass();
$sqlStr = “INSERT INTO usuarios (user, nombre, apellidos, domicilio, mail, contraseña) VALUES (’”.$this->User.”‘, ‘”.$this->nombre.”‘,’”.$this->Apellidos.”‘,’”.$this->Domicilio.”‘,’”.$this-> Mail.”,’”.$this->Contraseña.”‘)”;
mysql_query($sqlStr);
}
?>
mat
May 25th, 2008 at 10:54 am
9creo que el problema esta en esta linea
$sqlStr = “INSERT INTO usuarios (user, nombre, apellidos, domicilio, mail, contraseña) VALUES (’”.$this->User.”‘, ‘”.$this->nombre.”‘,’”.$this->Apellidos.”‘,’”.$this->Domicilio.”‘,’”.$this-> Mail.”,’”.$this->Contraseña.”‘)”;
Segun yo estoy intentando guardar los atributos del objeto en la base de datos
Stankiewicz
June 29th, 2008 at 8:57 pm
10Pecesama es profesor?
Orale.
Qué materias imparte?
Fue al evento de Google?
Qué hizo en su visita a la Ciudad de Méxioco?
Yo conocía a Pecesama por el proyecto de Sabrosus, lo uso en mi sitio.
Y la próxima semana estaré en Cabo San Lucas, Pecesama en que Baja California vive? Supongo que en la del norte.
Stankiewicz
June 29th, 2008 at 9:05 pm
11Ah! Y lo más importante, por lo que realmente quería comentar. Qué tiene de extraordinario este “patrón” de diseño? No se supone que para eso sirven las interfaces? Por qué simplemente no llamarle “programación con interfaces”?
pecesama
July 2nd, 2008 at 12:45 pm
12Hola Stankiewicz, un placer leerte por aqui, doy clases relacionadas con la ingenieria de software principalmente.
Desafortunadamente no pude asistir al evento de google.
Estuve en Ensenada por un par de años durante mi maestria, pero ya no ando por alla, ahora radico en la ciudad de Colima.
Interesante pregunta, ya que es fácil confundirse, los patrones de diseño se aplican en diferente nivel al de la programación, estos se aplican en el diseño del software y de la arquitectura para resolver diferentes problemas con un contexto en comun de una forma simple e incluso elegante.
Por eso una vez que el arquitecto del software tomó la desición de aplicar un patrón entonces sí ya llegamos a la programación para ver como implementar dicho patrón, y es en ese lugar donde ya se aplican las difeentes técnicas.
Stankiewicz
July 2nd, 2008 at 6:53 pm
13Hola. Entonces dices que los patrones son ideas que se proponen en el diseño, pero en la implementación, si se consigue otra forma de obtener ese mismo resultado (en este caso sin interfaces) también sería seguir el patrón?
RSS feed for comments on this post · TrackBack URI
Leave a reply
Recomendados
Pecesama.Net [Wiki]
Meta
Publicidad
Calendario
Categorias
Recent Entries
Recent Comments
Most Commented
Pecesama.Net [weblog] is proudly powered by WordPress - BloggingPro theme by: Design Disease