Le modèle d'usine des modèles de conception

Prenez l'habitude d'écrire ensemble ! C'est le 17ème jour de ma participation au "Nuggets Daily New Plan · April Update Challenge", cliquez pour voir les détails de l'événement .

Introduction

Le modèle d'usine est le modèle le plus couramment utilisé pour instancier des objets. C'est un modèle qui remplace la nouvelle opération par une méthode d'usine. Le célèbre forum Jive utilise de nombreux modèles d'usine, que l'on peut voir partout dans le système de programmation Java. Étant donné que le modèle d'usine équivaut à créer de nouveaux objets d'instance, nous devons souvent générer des objets d'instance en fonction de la classe Class, comme A a=new A() Le modèle d'usine est également utilisé pour créer des objets d'instance, nous aurons donc besoin de plus Si vous envisagez d'utiliser le modèle d'usine, même si cela peut nécessiter un peu plus de travail, cela apportera une plus grande évolutivité à votre système et minimisera la quantité de modifications.

Masaaki

Question de réflexion Comment le code qui instancie des classes concrètes peut-il être extrait de l'application, ou encapsulé afin qu'il n'interfère pas avec d'autres parties de l'application ? P111

  • Placez le code d'instanciation d'une classe spécifique dans un objet pour la gestion et décidez d'instancier une classe spécifique via différents paramètres d'entrée

Simple Factory
n'est pas l'un des 23 modèles de conception GOF, mais plutôt un idiome de programmation. P117

image.png

Caractéristiques

  • Les instances sont généralement créées à l'aide de méthodes statiques, mais il n'existe aucun moyen de modifier le comportement de la méthode créée par héritage. P115

défaut

  • En violation du principe ouvert-fermé, la classe d'usine doit être modifiée lors de l'ajout de produits.

Modèle de méthode d'usine

Une interface de création d'objets est définie, mais c'est à la sous-classe de décider quelle classe instancier. P134

image.png

Caractéristiques

  • Les méthodes de fabrique permettent aux classes de reporter l'instanciation aux sous-classes. P134
  • "Décision" fait référence à la sous-classe à choisir, qui détermine quelle sous-classe est réellement créée. P134
  • L'ajout d'un produit ou la modification de l'implémentation d'un produit n'affecte pas l'interface d'usine. P135

défaut

  • Lorsque de nouveaux produits sont ajoutés, de nouvelles usines doivent être ajoutées, ce qui augmente la complexité du code.

Le modèle de fabrique abstraite
fournit une interface pour créer des familles d'objets liés ou dépendants sans spécifier explicitement une classe concrète. P156

image.png

Caractéristiques

  • Les méthodes d'une usine abstraite sont souvent implémentées en tant que méthodes d'usine. P158
  • Une collection de produits connexes. P159

défaut

  • Lorsqu'un nouveau produit connexe est ajouté, l'interface et la classe d'implémentation doivent être modifiées. P159

Principes de conception

  • Principe d'inversion de dépendance : dépend de l'abstraction, pas de classes concrètes. P139

Les composants de haut niveau ne peuvent pas dépendre de composants de bas niveau, et les composants de haut niveau et les composants de bas niveau doivent dépendre d'abstractions. Les composants de bas niveau de P139
dépendent d'abstractions de haut niveau. P141
Lignes directrices pour éviter de violer le principe d'inversion des dépendances (vous pouvez essayer de le suivre en fonction de la situation réelle) P143
Les variables ne peuvent pas contenir de références à des classes concrètes :
c'est-à-dire que si vous n'importez pas de classes concrètes, vous pouvez utiliser des fabriques pour éviter les références à classes concrètes.
Ne créez pas de classes dérivées de classes concrètes :
[Explication dans le livre] Vous pouvez dépendre de classes concrètes lorsque vous les utilisez, mais laissez les classes être dérivées d'interfaces ou de classes abstraites.
[Mes propres réflexions] Tant que le les classes concrètes sont dérivées d'interfaces ou de classes abstraites, les classes peuvent être dérivées des classes concrètes
sans remplacer la classe de base.Méthodes implémentées : [
explication dans le livre] Les méthodes implémentées dans la classe de base doivent être partagées par toutes les sous-classes.
propres pensées] Il a également été mentionné plus tôt dans le livre que la classe de base peut fournir des méthodes par défaut et que les sous-classes peuvent les remplacer comme les leurs.

ce que tu penses

  • En fait, lorsque j'écris habituellement du code, j'inverse souvent ma façon de penser. Par exemple, lorsque je m'appuie sur différentes implémentations d'une interface pour compléter différentes petites fonctions, je n'écrirai pas d'abord l'implémentation spécifique, mais compléterai le code de niveau supérieur. framework en fonction de l'interface. , puis complétez chaque classe d'implémentation en détail.
  • Bien que le livre parle de la différence entre la méthode d'usine et l'usine abstraite, je pense toujours que la différence entre les deux n'est pas grande, mais elle est un peu différente dans les scénarios d'application. La méthode d'usine fait référence à la création d'une classe de produits, tandis que la clé d'usine abstraite est liée à plusieurs classes de produits. Une usine abstraite est une méthode d'usine lorsqu'il n'y a qu'une seule classe de produits connexes.

Je suppose que tu aimes

Origine juejin.im/post/7087872450439938061
conseillé
Classement