La source de ces informations provient de : http://java.dzone.com/news/intro-design-patterns-abstract
Usine abstraite et méthode d'usine
Les méthodes d'une fabrique abstraite sont mises en œuvre en tant que méthodes de fabrique. Le modèle de fabrique abstraite et le modèle de méthode de fabrique découplent le système client des classes d'implémentation réelles par le biais des types abstraits et des fabriques. La méthode Factory crée des objets par héritage, tandis que la fabrique abstraite crée des objets par composition.
Le modèle de fabrique abstraite se compose d'une fabrique abstraite (AbstractFactory), d'une fabrique concrète (ConcreteFactory), d'un produit abstrait (AbstractProduct), d'un produit concret (ConcreteProduct) et d'un client.
Comment mettre en œuvre
Le modèle de l'usine abstraite peut être mis en œuvre en utilisant le modèle de la méthode de l'usine, le modèle du prototype ou le modèle du singleton. L'objet ConcreteFactory peut être implémenté en tant que Singleton car une seule instance de l'objet ConcreteFactory est nécessaire.
Le modèle Factory Method est une version simplifiée du modèle Abstract Factory. Le modèle Factory Method est responsable de la création de produits qui appartiennent à une seule famille, tandis que le modèle Abstract Factory traite de multiples familles de produits.
La méthode Factory utilise des interfaces et des classes abstraites pour découpler le client de la classe du générateur et des produits qui en résultent. Abstract Factory possède un générateur qui est un conteneur pour plusieurs méthodes de fabrique, ainsi que des interfaces découplant le client du générateur et des produits.
Quand utiliser le modèle de la méthode Factory
Utilisez le modèle Factory Method lorsqu'il est nécessaire de découpler un client d'un produit particulier qu'il utilise. Utilisez la méthode Factory pour décharger un client de la responsabilité de créer et de configurer les instances d'un produit.
Quand utiliser le modèle de la fabrique abstraite
Utilisez le modèle Abstract Factory lorsque les clients doivent être découplés des classes de produits. Particulièrement utile pour la configuration et la modification des programmes. Le modèle Abstract Factory peut également imposer des contraintes sur les classes qui doivent être utilisées avec d'autres. Cela peut représenter beaucoup de travail de créer de nouvelles fabriques concrètes.
Ejemplos:
Exemple de fabrique abstraite 1
Cette spécification pour les disques pour préparer différents types de pâtes dans une machine à pâtes est l'usine abstraite, et chaque disque spécifique est une usine. Toutes les Factories (disques de la machine à pâtes) héritent leurs propriétés de la Factory abstraite. Chaque disque individuel contient les informations sur la façon de créer les pâtes, et le fabricant de pâtes ne les contient pas.
Exemple de fabrique abstraite 2 :
L'équipement d'emboutissage correspond à la fabrique abstraite, car il s'agit d'une interface pour les opérations qui créent des objets produits abstraits. Les matrices correspondent à l'usine concrète, car elles créent un produit concret. Chaque catégorie de pièces (capot, porte, etc.) correspond au produit abstrait. Les pièces spécifiques (par exemple, la porte côté conducteur d'une Camry 99) correspondent à l'usine concrète. les produits concrets.
Exemple de méthode d'usine :
L'entreprise de jouets correspond au Créateur, puisqu'elle peut utiliser l'usine pour créer des objets produits. La division de l'entreprise de jouets qui fabrique un type de jouet spécifique (cheval ou voiture) correspond au ConcreteCreator.
12 votes
A mon avis, la qualité des réponses dans Différences entre le modèle de fabrique abstraite et la méthode Factory sont bien meilleures que celles d'ici.
1 votes
La différence essentielle est que la méthode Factory utilise l'héritage (l'indirection est verticale, par exemple.
createThing()
) et Abstract Factory utilise la composition (l'indirection est horizontale, par ex.getFactory().createThing()
)1 votes
Cette question n'est pas ce que certains de ses répondants pensent qu'elle est. Ne manquez pas La réponse de Tengiz qui définit les trois termes distincts que sont Factory, Abstract Factory et Factory Method.