jeudi 14 mars 2024

Design pattern: Factory

===== Factory ====

Le modèle de conception Factory (ou modèle de fabrique) est un modèle de création qui fournit une interface pour créer des instances d'une classe, tout en permettant aux sous-classes de modifier le type d'instances qui seront créées. Il appartient à la catégorie des modèles de création, et son objectif principal est de déléguer la responsabilité de l'instanciation des objets à des classes spécifiques, plutôt que de les créer directement dans le code client.

Caractéristiques clés du modèle de conception Factory :

1. **Interface commune :** Définit une interface commune pour créer des objets, mais laisse les sous-classes décider quels objets créer.

2. **Délégation :** Délègue la responsabilité de l'instanciation des objets à des sous-classes ou à des méthodes spécifiques.

3. **Couplage réduit :** Réduit le couplage entre le code client et les classes concrètes, facilitant ainsi l'extension du système avec de nouvelles classes.

Voici un exemple simple en pseudo-code :

```plaintext

interface IProduct:

method Operation()

class ConcreteProductA implements IProduct:

method Operation():

// Implémentation spécifique de ConcreteProductA

class ConcreteProductB implements IProduct:

method Operation():

// Implémentation spécifique de ConcreteProductB

class Creator:

method FactoryMethod() returns IProduct:

// Méthode de fabrique définie dans la classe Creator

// Chaque sous-classe de Creator peut implémenter cette méthode pour créer différents produits.

class ConcreteCreatorA extends Creator:

method FactoryMethod() returns IProduct:

return new ConcreteProductA()

class ConcreteCreatorB extends Creator:

method FactoryMethod() returns IProduct:

return new ConcreteProductB()

```

Dans cet exemple, `Creator` est la classe qui a la méthode de fabrique (`FactoryMethod`). Les sous-classes comme `ConcreteCreatorA` et `ConcreteCreatorB` implémentent cette méthode pour créer différentes instances de produits (`ConcreteProductA` et `ConcreteProductB` dans cet exemple). Cela permet une flexibilité dans le choix des objets à créer sans modifier le code client.


Aucun commentaire:

Enregistrer un commentaire