Ver Mensaje Individual
  #3 (permalink)  
Antiguo 10/08/2012, 09:20
Avatar de OsSk4R
OsSk4R
 
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 17 años, 6 meses
Puntos: 74
Respuesta: Factory, Simple Factory y Abstract Factory

:O ¡que rapidez!

Veamos, me he leído el post que mencionas y me ha quedado claro el tema del Simple Factory y el Factroy Method. De hecho, ahora veo claramente que el ejemplo que puse, es un Simple Factory porque estoy creando diferentes objetos que sé que tienen una relación en concreto con esa fabrica, en este caso la fabrica DBFactory.

Cita:
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...
Entiendo por esto que puedo crear un objeto que sea una fabrica de usuarios y que a su vez esta fabrica, cree usuarios desde un XML, BD... ¿no?
He realizado un ejemplo para ver si he entendido el Factory Method, aunque tengo el presagio que esta mal
Código PHP:
Ver original
  1. <?php
  2.  
  3. interface IFactory
  4. {
  5.     static public function createUserXML($name);
  6.     static public function createUserBD($name);
  7. }
  8.  
  9. class UserFactory implements IFactory
  10. {
  11.     static public function createUserXML($name)
  12.     {
  13.         return new UserXML($name);
  14.     }
  15.    
  16.     static public function createUserBD($name)
  17.     {
  18.         return new UserBD($name);
  19.     }  
  20. }
  21.  
  22. abstract class User
  23. {
  24.     protected $_name = NULL;  
  25.      
  26.     public function __construct($name)  
  27.     {  
  28.         $this->_name = $name;  
  29.     }  
  30.  
  31.     public function getName()  
  32.     {  
  33.         return $this->_name;  
  34.     }  
  35. }
  36.  
  37. class UserXML extends User
  38. {
  39.  
  40. }
  41.  
  42. class UserBD extends User
  43. {
  44.  
  45. }
  46.  
  47. $objeto = UserFactory::createUserXML('UserXML');
  48. echo $objeto->getName();

Por otro lado, el patrón Abstract Factory sigo sin cogerlo del todo. El diagrama lo entiendo pero ya esta, no veo claro cuando usarlo y cuando no ya que creo que con un simple factory es suficiente... En fin, sinceramente tengo un lio ahora mismo que no me aclaro ni yo

Saludos y gracias