Définition: fournit une interface pour créer un ensemble d'objets connexes ou interdépendants sans spécifier leurs classes concrètes.
Type: Créer un schéma de classe de modèle de classe:
La différence entre le modèle d'usine abstrait et le modèle de méthode d'usine
Résumé Le modèle d'usine est une version améliorée du modèle de méthode d'usine, qui est utilisée pour créer un ensemble d'objets associés ou interdépendants. La différence entre l'informatique et le modèle de méthode d'usine est que le modèle de méthode d'usine cible une structure de hiérarchie de produit; tandis que le modèle d'usine abstrait cible plusieurs structures de hiérarchie de produits. En programmation, une structure de produit se manifeste généralement comme une interface ou une classe abstraite. C'est-à-dire que tous les produits fournis par le modèle de méthode d'usine sont dérivés de la même interface ou de la même classe abstraite, tandis que les produits fournis par le modèle d'usine abstrait sont dérivés d'une interface différente ou d'une classe abstraite.
Dans le modèle d'usine abstrait, il existe un concept de famille de produits: la famille dite de produits fait référence à une famille de produits composée de produits fonctionnellement liés dans différentes hiérarchies de produits. La série de produits fournies par le modèle d'usine abstrait forment une famille de produits; tandis que la série de produits fournies par la méthode d'usine est appelée structure hiérarchique. Nous utilisons toujours l'exemple de la production de voitures pour illustrer la différence entre eux.
Dans le diagramme de classe ci-dessus, le hayon et la berline sont appelés deux structures hiérarchiques différentes; tandis que les véhicules de déplacement 2.0 et 2,4 véhicules de déplacement sont appelés deux familles de produits différentes. Pour être plus spécifique, le hayon à 2,0 déplacement et le hayon à 2,4 déplacements appartiennent à la même structure de niveau, la berline à 2,0 déplacement et la berline 2,4-déplacement appartiennent à une autre structure de niveau; tandis que la berline à 2,0 déplacements et la berline à 2,0 déplacements appartiennent à la même famille de produits, et le hayon à 2,4 déplacement et la berline à 2,4 déplacement appartiennent à une autre famille de produits.
Une fois que vous comprenez les concepts de la structure hiérarchique et de la famille des produits, vous comprendrez la différence entre le modèle de méthode d'usine et le modèle d'usine abstrait. Si tous les produits de l'usine appartiennent à la même structure hiérarchique, ils appartiennent au modèle de méthode d'usine; Si les produits de l'usine proviennent de plusieurs structures hiérarchiques, elles appartiennent au modèle d'usine abstrait. Dans cet exemple, si un modèle d'usine fournit un hayon de déplacement 2.0 et un hayon de déplacement 2.4, il appartient au modèle de méthode d'usine; Si un modèle d'usine fournit deux produits, 2,4 à hayon de déplacement et une berline de déplacement 2.4, ce modèle d'usine est un modèle d'usine abstrait, car les produits qu'il fournit appartiennent à deux structures hiérarchiques différentes. Bien sûr, si une usine fournit des produits des quatre modèles, car les produits appartiennent à deux structures hiérarchiques, il appartiendra bien sûr également au modèle d'usine abstrait.
Exemple
Regardons l'exemple de classe abstrait de la classe d'usine:
Package AbstractFactory; classe abstraite de la classe abstraite AbstractCreat {// Créer une méthode de produit Abstract Public AbstractProducta CreateProducta (); // Créer B Méthode de produit Public Résumé AbstractProductB CreateProductB ();}Classe abstraite de produit a
Package AbstractFactory; classe abstrait public abstractProducta {// méthode partagée par produit un public void shareMethod () {System.out.println ("Méthode de traitement de la logique métier partagée par le produit a ..."); } // Méthode différents sous-produits du produit un abstrait public void dosomething (); }Classe abstraite du produit B
Package AbstractFactory; classe abstrait public abstractProductB {// méthode partagée par produit b public void shareMethod () {System.out.println ("Méthode de traitement de la logique métier partagée par le produit b ..."); } // différents sous-produits du produit b public abstrait void dosomething (); } Package de classe d'implémentation d'usine AbstractFactory; La classe publique Creator1 étend AbstractCreator {@Override public abstractProducta CreateProducta () {return new Producta1 (); } @Override public abstractProductB createProductB () {return new ProductB1 (); }} Package de classe d'implémentation d'usine AbstractFactory; La classe publique Creator2 étend AbstractCreator {@Override public abstractProducta CreateProducta () {return new Producta2 (); } @Override public abstractProductB CreateProductB () {return new ProductB2 (); }}Produit A1
Package AbstractFactory; La classe publique Producta1 étend AbstractProducta {@Override public void dosomething () {System.out.println ("Méthode de traitement de la logique métier du produit a1 ..."); }}Produit A2
Package AbstractFactory; La classe publique Producta2 étend AbstractProducta {@Override public void dosomething () {System.out.println ("Méthode de traitement de la logique commerciale du produit a2 ..."); }}Produit B1
Package AbstractFactory; classe publique ProductB1 étend AbstractProductB {@Override public void dosomething () {System.out.println ("B1 Business Logic Processing Method ..."); }}Produit B2
Package AbstractFactory; classe publique ProductB2 étend AbstractProductB {@Override public void dosomething () {System.out.println ("B2 Business Logic Processing Method ..."); }} Avantages du modèle d'usine abstrait
En plus d'avoir les avantages du modèle de méthode d'usine, l'avantage le plus important est que la famille des produits peut être limitée au sein de la classe. La soi-disant famille de produits a généralement une certaine relation dans une plus ou moins loin. Le modèle d'usine abstrait peut définir et décrire la relation entre la famille des produits au sein de la classe sans avoir à introduire une nouvelle classe spécifiquement pour la gestion.
Inconvénients du modèle d'usine abstrait
L'élargissement de la famille des produits sera une tâche très laborieuse. Si un nouveau produit doit être ajouté à la famille des produits, presque toutes les classes d'usine doivent être modifiées. Par conséquent, lors de l'utilisation du modèle d'usine abstrait, la division de la structure de la hiérarchie des produits est très importante.
Scénarios applicables
Les modèles d'usine abstraits peuvent être utilisés lorsque les objets à créer sont une série de familles de produits interdépendantes ou interdépendantes. Pour le dire plus clairement, dans un système d'héritage, s'il existe plusieurs structures hiérarchiques (c'est-à-dire que plusieurs classes abstraites existent), et qu'il existe certaines corrélations ou contraintes entre les classes d'implémentation divisées en chaque structure hiérarchique, le modèle abstrait d'usine peut être utilisé. Il est plus approprié d'utiliser plusieurs usines indépendantes pour créer des produits s'il n'y a pas d'associations ou de contraintes entre les classes d'implémentation dans chaque hiérarchie.
Résumer
Qu'il s'agisse du modèle d'usine simple, du modèle de méthode d'usine ou du modèle d'usine abstrait, ils appartiennent tous au modèle d'usine et sont très similaires dans la forme et les caractéristiques. Leur objectif ultime est de se découpler. Lorsque vous l'utilisez, nous n'avons pas à nous soucier de savoir si ce modèle est une méthode d'usine ou un modèle d'usine abstrait, car l'évolution entre elles est souvent difficile à comprendre. Souvent, vous constaterez que lorsqu'une nouvelle exigence arrive, une petite modification est effectuée et une nouvelle méthode est ajoutée, les produits de la classe forment la famille de produits dans différentes structures hiérarchiques, il devient le modèle d'usine abstrait; Et pour le modèle d'usine abstrait, lorsqu'une méthode est réduite pour faire en sorte que les produits fournis ne forment plus la famille des produits, il évolue vers le modèle de méthode d'usine.
Par conséquent, lorsque vous utilisez le mode d'usine, il vous suffit de vous soucier de savoir si le but de réduire le couplage a été atteint.