Middle
Care este diferența dintre pattern-ul 'fabrica' și 'metoda fabricii'?
sobes.tech AI
Răspuns de la AI
Modelul de tip "Fabrica" (Simple Factory) se ocupă de crearea obiectelor de același tip, ascunzând logica instanțierii lor. Este o clasă separată sau o funcție statică care, pe baza parametrilor de intrare, creează și returnează un obiect concret.
<?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("Tip de produs invalid");
}
}
}
Modelul "Metoda Fabrica" (Factory Method) este un pattern de creare care definește o interfață pentru crearea unui obiect, dar permite subclasei să decidă ce clasă să instanțieze. Transferă responsabilitatea creării obiectelor către subclase.
<?php
interface Product
{
public function operation(): string;
}
class ConcreteProductA implements Product
{
public function operation(): string
{
return "Rezultatul ConcreteProductA";
}
}
class ConcreteProductB implements Product
{
public function operation(): string
{
return "Rezultatul ConcreteProductB";
}
}
abstract class Creator
{
abstract public function factoryMethod(): Product;
public function someOperation(): string
{
// Apelarea metodei factory pentru a crea un produs.
$product = $this->factoryMethod();
// Acum, folosește produsul.
return "Creator: Același cod al creatorului a lucrat chiar cu " . $product->operation();
}
}
class ConcreteCreatorA extends Creator
{
public function factoryMethod(): Product
{
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator
{
public function factoryMethod(): Product
{
return new ConcreteProductB();
}
}
Diferența principală este următoarea:
| Caracteristică | Modelul "Fabrica" (Simple Factory) | Modelul "Metoda Fabrica" (Factory Method) |
|---|---|---|
| Responsabilitate | O clasă sau o funcție statică creează obiecte. | Subclasele decid ce clasă să creeze. |
| Flexibilitate | Limitată. Necesită modificarea clasei fabrică la adăugarea unui nou tip de produs. | Înaltă. Se extinde ușor prin adăugarea de noi subclase create. |
| Moștenire | De obicei nu este utilizată sau este utilizată pentru crearea unei singure fabrici. | Se bazează pe moștenire pentru a determina ce obiect să creeze. |
| Nivel de abstractizare | Mai puțin abstract. | Mai abstract. |
| Scop | Crearea centralizată a obiectelor. | Delegarea creării obiectelor către subclase. |