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 originalinterface IFactory
{
static public function create($name);
}
class DBFactory implements IFactory
{
private static
$database = array('mysql'=>'MySQL', 'postgresql'=>'PostgreSQL'); //DB permitidas static public function create($name)
{
switch (self::$database[$name]) {
case 'MySQL': return new MySQL($name); case 'PostgreSQL': return new PostgreSQL($name);
default:
echo 'Tipo de base de datos desconocida';
}
}
}
abstract class DB
{
protected $_name = NULL;
public function __construct($name)
{
$this->_name = $name;
}
public function getName()
{
return $this->_name;
}
}
{
}
class PostgreSQL extends DB
{
}
//Supongamos que el usuario elije la base de datos a la que conectarse desde un select option:
$select_db = 'mysql'; //Nos trae la elección
$objeto = DBFactory::create($select_db);
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,