Sobes.tech
Middle

Kuo skiriasi 'fabrikos' modelis nuo 'fabriko metodo'?

sobes.tech AI

Atsakymas iš AI

Pavyzdys "Fabrika" (Simple Factory) atsako už vieno tipo objektų kūrimą, slepiant jų instancijavimo logiką. Jis yra atskiras klasė arba statinė funkcija, kuri pagal įvestus parametrus sukuria ir grąžina konkretų 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");
        }
    }
}

"Fabrikos" (Factory Method) šablonas yra kūrybinis dizaino šablonas, kuris apibrėžia sąsają objektui kurti, bet leidžia pogrupiams nuspręsti, kokį klasės egzempliorių kurti. Jis perkelia atsakomybę už objektų kūrimą į pogrupius.

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

Pagrindinis skirtumas yra šis:

Savybė "Fabrika" (Simple Factory) modelis "Fabrikos metodas" (Factory Method)
Atsakomybė Vienas klasė arba statinė funkcija sukuria objektus. Pogrupiai nusprendžia, kokį klasės egzempliorių kurti.
Lankstumas Ribotas. Reikia keisti fabrikos klasę, pridedant naują tipą. Aukštas. Lengvai išplečiamas pridedant naujas pogrupius-kūrėjus.
Paveldėjimas Paprastai nenaudojama arba naudojama vieno fabriko kūrimui. Priklauso nuo paveldėjimo, norint nustatyti, kokį objektą kurti.
Abstrakcijos lygis Mažiau abstraktus. Daugiau abstraktus.
Tikslas Objektų centralizuotas kūrimas. Kūrybos proceso delegavimas pogrupiams.