Middle
¿Cuál es la diferencia entre el patrón 'fábrica' y el 'método de fábrica'?
sobes.tech AI
Respuesta de la IA
El patrón "Fábrica" (Simple Factory) se encarga de crear objetos de un mismo tipo, ocultando la lógica de su instanciación. Es un clase separada o una función estática que, en base a los parámetros de entrada, crea y devuelve un objeto concreto.
<?php
class ProductA {}
class ProductB {}
class ProductFactory
{
public static function createProduct(string $type)
{
switch ($type) {
case 'A':
return new ProductA();
case 'B':
return new ProductB();
default:
throw new \InvalidArgumentException("Tipo de producto inválido");
}
}
}
El patrón "Método de Fábrica" (Factory Method) es un patrón de creación que define una interfaz para crear un objeto, pero permite a las subclases decidir qué clase instanciar. Traslada la responsabilidad de crear objetos a las clases hijas.
<?php
interface Product
{
public function operation(): string;
}
class ConcreteProductA implements Product
{
public function operation(): string
{
return "Resultado de ConcreteProductA";
}
}
class ConcreteProductB implements Product
{
public function operation(): string
{
return "Resultado de ConcreteProductB";
}
}
abstract class Creator
{
abstract public function factoryMethod(): Product;
public function someOperation(): string
{
// Llamar al método de fábrica para crear un objeto Product.
$product = $this->factoryMethod();
// Ahora, usar el producto.
return "Creator: El mismo código del creador acaba de trabajar con " . $product->operation();
}
}
class ConcreteCreatorA extends Creator
{
public function factoryMethod(): Product
{
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator
{
public function factoryMethod(): Product
{
return new ConcreteProductB();
}
}
La diferencia principal es la siguiente:
| Característica | Patrón "Fábrica" (Simple Factory) | Patrón "Método de Fábrica" (Factory Method) |
|---|---|---|
| Responsabilidad | Una clase o función estática crea objetos. | Las subclases determinan qué tipo de objeto crear. |
| Flexibilidad | Limitada. Requiere modificar la clase fábrica al agregar un nuevo tipo de producto. | Alta. Se puede ampliar fácilmente añadiendo nuevas subclases creadoras. |
| Herencia | Generalmente no se usa o se usa para crear una única fábrica. | Se basa en la herencia para determinar qué objeto crear. |
| Nivel de abstracción | Menos abstracto. | Más abstracto. |
| Objetivo | Creación centralizada de objetos. | Delegar la creación de objetos a las subclases. |