Middle
Aký je rozdiel medzi vzorcom 'továrňa' a 'továrenskou metódou'?
sobes.tech AI
Odpoveď od AI
Vzor "Továrňa" (Simple Factory) je zodpovedný za vytváranie objektov jedného typu, skrýva logiku ich inštancovania. Predstavuje samostatnú triedu alebo statickú funkciu, ktorá na základe vstupných parametrov vytvorí a vráti konkrétny objekt.
<?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("Invalid product type");
}
}
}
Vzor "Funkcia továrne" (Factory Method) je vytvárací vzor, ktorý definuje rozhranie pre vytvorenie objektu, ale umožňuje podtriedam rozhodnúť, akú triedu inštancovať. Prenáša zodpovednosť za vytváranie objektov na podtriedy.
<?php
interface Product
{
public function operation(): string;
}
class ConcreteProductA implements Product
{
public function operation(): string
{
return "Result of ConcreteProductA";
}
}
class ConcreteProductB implements Product
{
public function operation(): string
{
return "Result of ConcreteProductB";
}
}
abstract class Creator
{
abstract public function factoryMethod(): Product;
public function someOperation(): string
{
// Call the factory method to create a Product object.
$product = $this->factoryMethod();
// Now, use the product.
return "Creator: The same creator's code has just worked with " . $product->operation();
}
}
class ConcreteCreatorA extends Creator
{
public function factoryMethod(): Product
{
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator
{
public function factoryMethod(): Product
{
return new ConcreteProductB();
}
}
Hlavná rozdiel je nasledovná:
| Charakteristika | Vzor "Továrna" (Simple Factory) | Vzor "Funkcia továrne" (Factory Method) |
|---|---|---|
| Zodpovednosť | Jedna trieda alebo statická funkcia vytvára objekty. | Podtriedy určujú, aký typ objektu bude vytvorený. |
| Flexibilita | Obmedzená. Vyžaduje zmeny v továrenskej triede pri pridávaní nového typu produktu. | Vysoká. Jednoducho sa rozširuje pridaním nových podtried tvorcov. |
| Dedičstvo | Zvyčajne sa nepoužíva alebo sa používa na vytvorenie jednej továrenskej triedy. | Závisí od dedičstva na určenie typu vytváraného objektu. |
| Úroveň abstrakcie | Menej abstraktné. | Viac abstraktné. |
| Cieľ | Centralizované vytváranie objektov. | Delegovanie vytvárania objektov podtriedam. |