Videotutorial: Patrones de diseño en PHP – Factory Pattern

Continuamos la serie de videos sobre patrones de diseño en PHP con el patrón creacional Factory, que consiste en un método para crear objetos cuando no sabemos la clase exacta del objeto que va a ser creado. De esta manera encapsulamos clases en una clase general de la que heredarán distintas subclases. Aunque el ejemplo utilizado es muy sencillo, este patrón es bastante interesante si tenemos en cuenta que podemos redefinir métodos en cada subclase, así como automatizar la creación de objetos utilizando variables (que podemos obtener de un fichero de settings).

Ver screencast (duración: 5:41)

Podéis ver el resto de screencasts en la página de videotutoriales, o suscribiros al podcast de iTunes.

Ejemplo de implementación

<?php
abstract class Vehiculo{
	protected $numruedas;
	public function getNumruedas(){
		return $this->numruedas;
	}
 
}
 
class Coche extends Vehiculo{
	protected $numruedas = 4;
}
 
class Bici extends Vehiculo{
	protected $numruedas = 2;
}
 
class VehiculoFactory{
	public static function crearVehiculo($tipo){
		$clasebase = 'Vehiculo';
		if(class_exists($tipo) && is_subclass_of($tipo, $clasebase))
			return new $tipo;
		else
			throw new Exception("No se reconoce el tipo de vehiculo $tipo");
 
	}
 
}
 
$vehiculo = Array('Bici', 'Coche');
 
foreach ($vehiculo as $v) {
	echo "El vehiculo $v tiene ".VehiculoFactory::crearVehiculo($v)->getNumruedas()." ruedas<br />";
}
?>
Compartir:

15 comentarios para “Videotutorial: Patrones de diseño en PHP – Factory Pattern”

  1. […] This post was mentioned on Twitter by Cosme Fulanito. Cosme Fulanito said: Videotutorial: Patrones de diseño en PHP – Factory Pattern – http://bit.ly/aFKYfx […]

  2. frank dice:

    me gusto el tutorial
    queria saber mas de los patrones de diseño y llegue a tu web.
    saludos

  3. […] original here: Videotutorial: Patrones de diseño en PHP – Factory Pattern « David … Agregar a […]

  4. Blanca dice:

    Que tipo de implementaciòn es esta David, podrias decirme cual de estas implementaciones es:
    1. Noob Implementation
    2. Static Factory with Reflection
    3. Self Registration without Reflection
    4. Self Registration with Reflection

    porfavor te lo agradecere infinitititivamente jajaja gracias.

  5. David Rojas dice:

    @Blanca El ejemplo que pongo es muy sencillo, para hacerse una idea de cómo funciona y sus ventajas, sin meterme en implementaciones concretas (que hay muchas, y dependen del lenguaje también). ‘Reflection’ se utiliza para crear dinámicamente una instancia de un tipo, y ‘self registration’ se aplica cuando cada clase concreta (en este caso ‘coche’ y ‘bici’ que heredan de ‘vehiculo’) se identifica a sí misma, por lo tanto diría que la implementación sería ‘self registration with reflection’.

  6. Blanca dice:

    muchisimas gracias David,
    he intentado suscribirme a tu blog y no he podido 🙁

  7. Blanca dice:

    una pregunta que editor de php utilizastes he intentado con phpdesigner, y winsyntax y no me funciona, 🙁

    este tema es bien complejo y bastante dificil de entender, me gusta leer mucho sobre lo que estudio. me gusta tu blog.

  8. David Rojas dice:

    @Blanca Utilizo textmate (es un editor para mac), no uso windows, aunque hay un clon parecido para windows que se llama e-texteditor. Aptana es muy completo y multiplataforma, aunque un poco pesado para mi gusto.
    Sobre suscribirte, ¿qué problema te da? En el lateral esta la dirección al feed de RSS, sólo tienes que añadirla a tu lector de RSS. También puedes suscribirte vía email, aunque lo he activado recientemente y por eso no he puesto ningún enlace, pero el link es este: http://feedburner.google.com/fb/a/mailverify?uri=DavidRojas&loc=es_ES

  9. Blanca dice:

    Listo! que Felicidad 🙂

  10. Blanca dice:

    OYE Te seguire de cerca en este tema!!! y en tanto aprenda te aportare

  11. Enrique dice:

    Hola David, me cuesta ver un poco la utilidad de este patrón, podrías orientarme con un ejemplo de uso real?
    Porque no veo la necesidad de crear una clase para que cree a otra, por que no usar simplemente:
    foreach ($vehiculo as $v) {
    $obj = new $v;
    echo “El vehiculo $v tiene $obj->getNumruedas().” ruedas”;
    }

  12. David Rojas dice:

    @Enrique En mi ejemplo no es útil, obviamente, está hecho simplemente para que se vea la idea en qué consiste. Pero un uso real, por ejemplo imagina que construyes un framework con una capa de abstracción para conectar a la base de datos, y tienes clases genéricas que manejan las operaciones con la BD, y después clases específicas para utilizar distintos drivers de BD (mysql, sqlite, mssql, etc.). Tendríamos una clase factory que instanciaría una clase u otra en tiempo de ejecución, dependiendo del driver de conexión que queramos usar. La idea de todos estos patrones principalmente es encapsular y organizar el código para un mantenimiento más eficiente.

  13. Jaime dice:

    Gracias por los tutoriales. Te he intentado mandar un correo; Espero que haya llegado.

    Saludos y gracias por las explicaciones

  14. Juan Carlos dice:

    Hola David, Muy claros los videos y la forma de relatar que has usado. Son muy didácticos cuando ya conoces php. Felicitaciones y te animo a que sigas publicando otros más.

  15. jcarrasco dice:

    Felicitaciones David. El tema patrones es difícil más aún para un novato como yo. Tú lo estás haciendo fácil de comprender.
    Muchas gracias. Espero con entusiasmo tu video tuto sobre el patrón composite.
    Bendiciones.

Deja un comentario

Introduce tu información personal en el formulario, regístrate o identifícate usando twitter con el siguiente botón.

Time limit is exhausted. Please reload the CAPTCHA.

RSS iTunes podcast Twitter

Categorías

Enlaces

Archivos