Middle
Jaka jest różnica między wzorem 'fabryka' a 'metodą fabryczną'?
sobes.tech AI
Odpowiedź od AI
Wzorzec "Fabryka" (Simple Factory) odpowiada za tworzenie obiektów tego samego typu, ukrywając logikę ich instancjonowania. Jest to osobna klasa lub statyczna funkcja, która na podstawie parametrów wejściowych tworzy i zwraca konkretny obiekt.
<?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("Nieprawidłowy typ produktu");
}
}
}
Wzorzec "Metoda Fabryki" (Factory Method) jest wzorcem kreacyjnym, który definiuje interfejs do tworzenia obiektu, ale pozwala podklasom decydować, jaką klasę zainstancjonować. Przenosi odpowiedzialność za tworzenie obiektów na podklasy.
<?php
interface Product
{
public function operation(): string;
}
class ConcreteProductA implements Product
{
public function operation(): string
{
return "Wynik ConcreteProductA";
}
}
class ConcreteProductB implements Product
{
public function operation(): string
{
return "Wynik ConcreteProductB";
}
}
abstract class Creator
{
abstract public function factoryMethod(): Product;
public function someOperation(): string
{
// Wywołaj metodę fabryczną, aby utworzyć produkt.
$product = $this->factoryMethod();
// Teraz użyj produktu.
return "Twórca: Ten sam kod twórcy właśnie pracował z " . $product->operation();
}
}
class ConcreteCreatorA extends Creator
{
public function factoryMethod(): Product
{
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator
{
public function factoryMethod(): Product
{
return new ConcreteProductB();
}
}
Główna różnica jest następująca:
| Cecha | Wzorzec "Fabrika" (Simple Factory) | Wzorzec "Metoda Fabryki" (Factory Method) |
|---|---|---|
| Odpowiedzialność | Jedna klasa lub funkcja statyczna tworzy obiekty. | Podklasy decydują, jaką klasę tworzyć. |
| Elastyczność | Ograniczona. Wymaga modyfikacji klasy fabryki przy dodawaniu nowego typu produktu. | Wysoka. Łatwo rozszerzalny przez dodanie nowych podklas twórców. |
| Dziedziczenie | Zazwyczaj nie używa się lub używa do tworzenia jednej fabryki. | Opiera się na dziedziczeniu, aby określić, jaki obiekt tworzyć. |
| Poziom abstrakcji | Mniej abstrakcyjny. | Bardziej abstrakcyjny. |
| Cel | Centralne tworzenie obiektów. | Delegowanie tworzenia obiektów podklasom. |