Le patron de Fabrique abstraite est un patron de conception des Gang of Four de la catégorie patron de création qui permet de créer des objets sans spécifier explicitement les classes des objets à créer. Cela permet de centraliser la logique de création d’objets et de rendre le code plus flexible en permettant de changer facilement les objets créés sans modifier le code existant.
Pour mettre en place ce patron, il est nécessaire de créer une interface pour la fabrique abstraite qui définit les méthodes pour créer les différents objets. Cette interface sera implémentée par une ou plusieurs classes concrètes de fabrique, chacune étant responsable de la création d’une catégorie d’objets.
Les classes clientes utiliseront la fabrique abstraite pour créer les objets dont elles ont besoin, sans avoir à connaître les classes concrètes utilisées pour la création.
La fabrique abstraite en PHP peut être utilisée pour créer des objets de différents types en fonction des besoins de l’application. Par exemple, une application de gestion de magasin peut utiliser une fabrique abstraite pour créer des objets de différents types de produits (livres, vêtements, électronique) en utilisant une méthode de création commune, telle que la méthode createProduct() :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
abstract class AbstractFactory { abstract public function createProduct(); } class BookFactory extends AbstractFactory { public function createProduct() { return new Book(); } } class ClothingFactory extends AbstractFactory { public function createProduct() { return new Clothing(); } } class ElectronicsFactory extends AbstractFactory { public function createProduct() { return new Electronics(); } } // Utilisation de la fabrique pour créer des objets de différents types $bookFactory = new BookFactory(); $book = $bookFactory->createProduct(); $clothingFactory = new ClothingFactory(); $clothing = $clothingFactory->createProduct(); $electronicsFactory = new ElectronicsFactory(); $electronics = $electronicsFactory->createProduct(); |