Sobes.tech
Middle

Jaký je rozdíl mezi vzorem 'továrna' a 'tovární metodou'?

sobes.tech AI

Odpověď od AI

Vzor "Továrna" (Simple Factory) je odpovědný za vytváření objektů jednoho typu, skrývá logiku jejich instancování. Představuje samostatnou třídu nebo statickou funkci, která na základě vstupních parametrů vytvoří a vrátí konkrétní 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 "Funkce továrny" (Factory Method) je vytvářející vzor návrhu, který definuje rozhraní pro vytvoření objektu, ale umožňuje podtřídám rozhodnout, jakou třídu instancovat. Přenáší odpovědnost za vytváření objektů na podtřídy.

<?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í rozdíl je následující:

Charakteristika Vzor "Továrna" (Simple Factory) Vzor "Funkce továrny" (Factory Method)
Odpovědnost Jedna třída nebo statická funkce vytváří objekty. Podtřídy určují, jaký typ objektu bude vytvořen.
Flexibilita Omezená. Vyžaduje změny v tovární třídě při přidání nového typu produktu. Vysoce rozšiřitelná přidáním nových podtříd-tvořitelů.
Dědičnost Obvykle se nepoužívá nebo se používá pro vytvoření jedné tovární třídy. Závisí na dědičnosti pro určení typu objektu, který má být vytvořen.
Úroveň abstrakce Méně abstraktní. Více abstraktní.
Cíl Centralizované vytváření objektů. Delegování vytváření objektů podtřídám.