Sobes.tech
Middle

Wat is het verschil tussen het patroon 'fabriek' en de 'fabriekmethode'?

sobes.tech AI

Antwoord van AI

Het "Fabriek"-patroon (Simple Factory) is verantwoordelijk voor het creëren van objecten van hetzelfde type, waarbij de logica van hun instantiering wordt verborgen. Het is een aparte klasse of een statische functie die op basis van invoerparameters een specifiek object creëert en retourneert.

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

Het "Factory Method" patroon is een creational pattern dat een interface definieert voor het maken van een object, maar subklassen toestaat te beslissen welke klasse geïnstantieerd moet worden. Het verplaatst de verantwoordelijkheid voor het maken van objecten naar de subklassen.

<?php

interface Product
{
    public function operation(): string;
}

class ConcreteProductA implements Product
{
    public function operation(): string
    {
        return "Resultaat van ConcreteProductA";
    }
}

class ConcreteProductB implements Product
{
    public function operation(): string
    {
        return "Resultaat van ConcreteProductB";
    }
}

abstract class Creator
{
    abstract public function factoryMethod(): Product;

    public function someOperation(): string
    {
        // Roep de fabriekmethode aan om een Product-object te maken.
        $product = $this->factoryMethod();
        // Gebruik nu het product.
        return "Creator: Dezelfde code van de maker heeft net gewerkt met " . $product->operation();
    }
}

class ConcreteCreatorA extends Creator
{
    public function factoryMethod(): Product
    {
        return new ConcreteProductA();
    }
}

class ConcreteCreatorB extends Creator
{
    public function factoryMethod(): Product
    {
        return new ConcreteProductB();
    }
}

Het belangrijkste verschil is als volgt:

Kenmerk "Fabriek" (Simple Factory) "Fabrieksmethode" (Factory Method)
Verantwoordelijkheid Een klasse of statische functie maakt objecten. Subklassen bepalen welke klasse wordt geïnstantieerd.
Flexibiliteit Beperkt. Vereist het wijzigen van de fabriek bij het toevoegen van een nieuw producttype. Hoog. Kan gemakkelijk worden uitgebreid door nieuwe subklassen toe te voegen.
Overerving Wordt meestal niet gebruikt of wordt gebruikt voor het maken van één fabriek. Gebaseerd op overerving om te bepalen welk object te maken.
Niveau van abstractie Minder abstract. Meer abstract.
Doel Gecentraliseerde creatie van objecten. Delegatie van objectcreatie aan subklassen.