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

Buenas,

Estoy tratando de aprender correctamente el uso del patrón factory puesto que antes lo estaba usando como una fábrica general de cualquier tipo de objetos
La cuestión es que después de leer por varios sitios y realizar un primer ejemplo continuo "sin comprenderlo".

Por ejemplo tengo lo siguiente:

Código PHP:
Ver original
  1. interface IFactory
  2. {
  3.     static public function create($name);
  4. }
  5.  
  6. class DBFactory implements IFactory
  7. {
  8.     private static $database = array('mysql'=>'MySQL', 'postgresql'=>'PostgreSQL'); //DB permitidas
  9.     static public function create($name)
  10.     {
  11.         switch (self::$database[$name]) {  
  12.             case 'MySQL': return new MySQL($name);  
  13.             case 'PostgreSQL': return new PostgreSQL($name);  
  14.             default:  
  15.                 echo 'Tipo de base de datos desconocida';  
  16.         }  
  17.     }
  18. }
  19.  
  20. abstract class DB
  21. {
  22.     protected $_name = NULL;  
  23.      
  24.     public function __construct($name)  
  25.     {  
  26.         $this->_name = $name;  
  27.     }  
  28.  
  29.     public function getName()  
  30.     {  
  31.         return $this->_name;  
  32.     }  
  33. }
  34.  
  35. class MySQL extends DB
  36. {
  37.  
  38. }
  39.  
  40. class PostgreSQL extends DB
  41. {
  42.  
  43. }
  44.  
  45. //Supongamos que el usuario elije la base de datos a la que conectarse desde un select option:
  46. $select_db = 'mysql'; //Nos trae la elección
  47. $objeto = DBFactory::create($select_db);
  48. echo $objeto->getName();

Entiendo que este ejemplo es el llamado "Simple Factory". ¿Estoy en lo correcto?
Ahora bien. mi duda... Factory Method y el Abstract Factory ¿qué diferencia tendrían con éste?.
Por ejemplo, la siguiente imagen explica el patrón Abstract Factory y sinceramente "no veo la diferencia" en cuanto al ejemplo que acabo de poner, sin embargo, mi ejemplo no es el patrón Abstract Factory.


Saludos y gracias,