Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

PHP OO Diferencia entre Factory Method, Simple Factory y Abstract Factory

Estas en el tema de Diferencia entre Factory Method, Simple Factory y Abstract Factory en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Que tal amigos ... yo pensaba que usaba el Factory Method, pero leyendo la teoria dice que este es manipulado por las clases que lo ...
  #1 (permalink)  
Antiguo 01/07/2011, 07:20
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años, 8 meses
Puntos: 31
Diferencia entre Factory Method, Simple Factory y Abstract Factory

Que tal amigos ... yo pensaba que usaba el Factory Method, pero leyendo la teoria dice que este es manipulado por las clases que lo hereden ...

Entonces llegue a la conclucion de que de el factory que uso es el Simple Factory, ya que lo uso para crear objetos centralizando todo en una sola clase ....

Segun lo que entiendo esto es asi ...

Simple Factory permite obtener instancias de los objetos que se han definido en la fabrica

Factory Method permite obtener instancias de los objetos que pertenencen a la familia que estamos heredando ... ni yo me entendi que escribi

Y el Abstract Method no tengo ni la misma minima idea para que usarlo

Porfavor si me explican la diferencia de cada uno de ellos, y un ejemplo muy simple
  #2 (permalink)  
Antiguo 01/07/2011, 08:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Diferencia entre Factory Method, Simple Factory y Abstract Factory

Simple Factory es una implementación concreta de un Factory, es la implementación sencilla cuando quieres crear diferentes objetos que sabes tienen una relación en concreto con esa fabrica, por ejemplo una fabrica de validadores, que crea implementaciones concretas de algún validador.

Factory Method, se usa para separar diferentes Fabricas de Objetos que estan dentro de un mismo componente común, por ejemplo, un objeto que crea formularios, puede tener un fabrica que cree formularios desde un XML, o desde un array, o desde una BDD, y tienes todos los métodos dentro de la misma fabrica, por ejemplo:
Código PHP:
Ver original
  1. FormFactory::fromXML();
  2. FormFactory::fromArray();
  3. FormFactory::fromBDD();

Abstract Factory es un patrón mucho más complejo pero igual de útil, la idea es que las mismas fábricas de objetos sean interfaces, así como los productos que crean son interfaces, y es la misma aplicación la que decide a travez de inyección de dependencias que implementación de fabrica y producto crear, en la Wikipedia hay un muy buen ejemplo de botones.

Saludos.
  #3 (permalink)  
Antiguo 01/07/2011, 08:43
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años, 8 meses
Puntos: 31
Respuesta: Diferencia entre Factory Method, Simple Factory y Abstract Factory

entonces esto que hago vendria hacer un Simple Factory no ?

Código PHP:
Ver original
  1. <?php
  2. interface ICoreSimpleFactory{
  3.     public static function getInstance($object);
  4. }
  5. class CoreSimpleFactory implements ICoreSimpleFactory{
  6.     public function __toString(){
  7.         return "Retona todas las instancias de nuestro core";
  8.     }
  9.     public static function getInstance($object) {
  10.         try{
  11.             switch($object){
  12.                 case 'Controller':
  13.                     return new Controller();
  14.                 default:
  15.                     throw new Exception("No se puede instanciar esta clase");
  16.                                         break;
  17.             }
  18.         }catch(Exception $e){
  19.             exit($e->getMessage());
  20.         }
  21.     }
  22. }

Ya que basicamente lo que hago es llamar a mis a las clases que hay en mi carpeta core, que dentro de esta se maneja los modelos, los controlladores, pero no el MVC en si, sino como va a trabajar estos, como voy a capturar las peticiones, como se carga un modelo etc ...
  #4 (permalink)  
Antiguo 01/07/2011, 09:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Diferencia entre Factory Method, Simple Factory y Abstract Factory

Sí, sería un ejemplo de Simple Factory, aún así la idea va mas alla, la idea del Factory es que cree objeto a travez del parámetro que le mandas, en este caso lo que estas haciendo es como un pseudo-loader, no estas creando un objeto como tal.

Recuerda la idea de la fabrica es que esta cree los objetos pero que tengan una relación directa, por ejemplo una fabrica de validadores, una fabrica de elementos de un formulario, una fabrica de documentos, etc.

El ejemplo que tu expones es realmente un loader que dependiendo de lo que quieras te va a hacer la carga de esa clase (aparte, el nombre getInstance() se debe de usar para devolver una instancia de la clase, si no haces complejo hasta leer el código mismo), por lo general las fabricas entran con un método estatico factory(), o con el nombre factory en la clase FormFactory, DocumentFactory, etc.

Saludos.
  #5 (permalink)  
Antiguo 01/07/2011, 09:31
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años, 8 meses
Puntos: 31
Respuesta: Diferencia entre Factory Method, Simple Factory y Abstract Factory

Podrimas enseñarme como hacer el ejemplo que planteo para que sea un Simple Factory ?
  #6 (permalink)  
Antiguo 01/07/2011, 09:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Diferencia entre Factory Method, Simple Factory y Abstract Factory

¿Que es lo que pretendes hacer con ese código? Por lo que veo en tu explicación, (que ya te repetí) no es un factory, si no un Class Loader.

Saludos.
  #7 (permalink)  
Antiguo 01/07/2011, 09:55
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años, 8 meses
Puntos: 31
Respuesta: Diferencia entre Factory Method, Simple Factory y Abstract Factory

Ok entonces ese class loader podria quedar mejor con el patron registry no ?, supongamos si quisiera que fuera un factory ya no usaria el switch-case, sino directamente creo que el objeto a partir del parametro que mando ?
  #8 (permalink)  
Antiguo 01/07/2011, 10:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Diferencia entre Factory Method, Simple Factory y Abstract Factory

El problema es que no entiendes, factory, es para crear objeto que tienen una relación de uso, no puedes crear un factory general que cargue todos tus objetos que quieres de toda tu aplicación, ya que estas sobrecargando lo que deseas hacer.

Por lo que entiendo, lo que quieres es cargar las librerias de tu aplicación o tus modelos o los controladores, por eso es que lo que debes de hacer es un class loader, como por ejemplo $this->load('foo', 'Controller'); o $this->load('bar', 'Model');

Saludos.
  #9 (permalink)  
Antiguo 03/07/2011, 15:44
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años, 8 meses
Puntos: 31
Respuesta: Diferencia entre Factory Method, Simple Factory y Abstract Factory

Creo que ya entendi ...... creoooo xD

Simple Factory permite crear objetos que mantenga relacion ... es decir podemos llamar a las subclases de una clase ? ya que mantienen una relacion como podria ser Usuario, el cual puede haber profesor y alumno ... ambos son usuarios pero implementan los mismos metodos y en esto caso crearia mi UserFactory para evitar tener que instanciar a cade clase por separado logrando centralizar todo en un no, no ?

Factory Method permite crear objetos que mantenga una relacion en comun en el mismo concepto ... supongamos que tengo mi SqlFactory que instancia mis DAO, y tengo 3 tipos de DAO llamados AlumnoDAO, la diferencia que uno esta para SQLSERver, Mysql y Oracle ... mi factory se encargaria de llamar a cada uno de ellos
  #10 (permalink)  
Antiguo 05/07/2011, 09:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Diferencia entre Factory Method, Simple Factory y Abstract Factory

Algo así, la idea del factoryMethod es que cree un objeto común pero creado a partir de diferentes componentes de entrada, lo que tu expones de los DAOs creo se solucionaría mejor con un Abstract Factory.

Saludos.

Etiquetas: abstract, diferencia, factory, method, simple
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 20:01.