Sobes.tech
Middle

Mi a különbség a 'gyár' minta és a 'gyári módszer' között?

sobes.tech MI

Válasz az MI-től

Az "Egységgyár" (Simple Factory) minta felelős az egy típusú objektumok létrehozásáért, elrejtve azok példányosításának logikáját. Egy külön osztály vagy statikus függvény képviseli, amely bemeneti paraméterek alapján létrehoz és visszaad egy adott objektumot.

<?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");
        }
    }
}

A "Gyárfüggvény" (Factory Method) egy létrehozó tervezési minta, amely meghatározza az interfészt az objektum létrehozásához, de lehetővé teszi az alosztályok számára, hogy eldöntsék, melyik osztályt példányosítsák. A felelősséget az objektumok létrehozásáért az alosztályokra hárítja.

<?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();
    }
}

A fő különbség a következő:

Jellemző "Egységgyár" (Simple Factory) minta "Gyárfüggvény" (Factory Method) minta
Felelősség Egy osztály vagy statikus függvény hoz létre objektumokat. Az alosztályok határozzák meg, melyik osztályt példányosítják.
Rugalmasság Korlátozott. A gyártó osztály módosítását igényli az új típus hozzáadásakor. Magas. Könnyen bővíthető új alosztályok hozzáadásával.
Öröklődés Általában nem használják, vagy csak egy gyártó osztály létrehozására. Az öröklődésen alapul a létrehozandó objektum típusának meghatározásához.
Absztrakciós szint Kevésbé absztrakt. Magasabb.
Cél Objektumok központosított létrehozása. A létrehozási folyamat delegálása az alosztályokra.