Sobes.tech
Middle

Quelle est la différence entre le motif 'fabrique' et la 'méthode de fabrique' ?

sobes.tech IA

Réponse de l'IA

Le motif "Usine" (Simple Factory) est responsable de la création d'objets d'un même type, en cachant la logique de leur instanciation. Il s'agit d'une classe séparée ou d'une fonction statique qui, en fonction des paramètres d'entrée, crée et retourne un objet concret.

<?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("Type de produit invalide");
        }
    }
}

Le motif "Méthode de Fabrique" (Factory Method) est un motif de création qui définit une interface pour créer un objet, mais permet aux sous-classes de décider quelle classe instancier. Il transfère la responsabilité de créer des objets aux sous-classes.

<?php

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

class ConcreteProductA implements Product
{
    public function operation(): string
    {
        return "Résultat de ConcreteProductA";
    }
}

class ConcreteProductB implements Product
{
    public function operation(): string
    {
        return "Résultat de ConcreteProductB";
    }
}

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

    public function someOperation(): string
    {
        // Appeler la méthode de fabrique pour créer un objet Product.
        $product = $this->factoryMethod();
        // Maintenant, utiliser le produit.
        return "Créateur : Le même code du créateur a juste fonctionné avec " . $product->operation();
    }
}

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

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

La différence principale est la suivante:

Caractéristique Motif "Usine" (Simple Factory) Motif "Méthode de Fabrique" (Factory Method)
Responsabilité Une classe ou une fonction statique crée des objets. Les sous-classes déterminent le type d'objet à créer.
Flexibilité Limitée. Nécessite de modifier la classe usine lors de l'ajout d'un nouveau type de produit. Élevée. Facile à étendre en ajoutant de nouvelles sous-classes créatrices.
Héritage Généralement non utilisé ou utilisé pour créer une seule usine. Repose sur l'héritage pour déterminer quel objet créer.
Niveau d'abstraction Moins abstrait. Plus abstrait.
Objectif Création centralisée d'objets. Délégation de la création d'objets aux sous-classes.