Sobes.tech
Middle

'Фабрика' үлгісі менен 'фабрика ыкмасы'нын айырмасы эмнеде?

sobes.tech AI

AIден жооп

Үлгү "Фабрика" (Simple Factory) объектілерді бір типке жасайтын жауапкершілікті алады, олардың инстанцирлеу логикасын жасырады. Ол жеке класс немесе статикалық функция ретінде ұсынылады, ол кіріс параметрлеріне негізделген нақты объектіні жасайды және қайтарады.

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

"Фабрика ыкмасы" (Factory Method) — объект түзүү үчүн интерфейс аныктай турган, бирок кайсы классты инстанцдоо керектигин чечүү үчүн подклассыларга мүмкүнчүлүк берген түзүүчү шаблон. Ал объект түзүү жоопкерчилигин подклассыларга өткөрөт.

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

Негізгі айырмасы келесідей:

Ерекшелік "Фабрика" үлгісі (Simple Factory) "Фабрикалық әдіс" үлгісі (Factory Method)
Жауапкершілік Бір класс немесе статикалық функция объектілерді жасайды. Қосымша кластар қандай класс инстанцировать ету керектігін анықтайды.
Икемділік Шектеулі. Жаңа өнім түрін қосқанда фабрика класын өзгерту қажет. Жоғары. Жаңа қосалқы кластарды қосу арқылы оңай кеңейтіледі.
Мұрагерлік Әдетте қолданылмайды немесе бір фабрика жасау үшін пайдаланылады. Мұрагерлікке негізделген, қай класс объектісі жасалатынын анықтау үшін.
Абстрактілік деңгейі Аздап. Көбірек.
Мақсаты Объектілерді орталықтандырылған түрде жасау. Жасау процесін қосымша кластарға тапсыру.