Modèles de conception Le modèle d'usine simple

Quand vous pensez à une usine, à quoi pensez-vous? Pour moi, c'est un endroit où les choses sont créées - c'est-à-dire un endroit centralisé où les choses sont produites. Plus tard, la livraison desdits produits est effectuée par l’usine sur la base d’une commande..

Disons que vous demandez une voiture. Une usine en créera une en fonction des spécifications de l'ordre de travail et la livrera ensuite une fois terminée..

Tout comme leurs homologues du monde réel, une fabrique de logiciels (c'est-à-dire un logiciel qui implémente le modèle de conception d'usine) est un objet responsable de la création et de la diffusion d'autres objets en fonction de paramètres entrants.. 

Il existe trois variantes du modèle d'usine:

  1. Modèle d'usine simple. Cela permet aux interfaces de créer des objets sans exposer la logique de création d'objets au client..
  2. Modèle de méthode d'usine. Cela permet aux interfaces de créer des objets, mais aux sous-classes de déterminer la classe à instancier..
  3. Modèle d'usine abstrait. Contrairement aux deux modèles ci-dessus, une fabrique abstraite est une interface permettant de créer des objets liés sans spécifier / exposer leurs classes. Nous pouvons également dire qu'il fournit un objet d'une autre usine responsable de la création des objets requis..

Le problème

Supposons que vous ayez une classe de voiture contenant toutes les propriétés et méthodes pertinentes pour une automobile. Dans sa forme la plus élémentaire, vous le créeriez comme ceci:

$ voiture = voiture neuve ();

Immédiatement, avec le temps, il faut modifier quelque peu la manière dont l’objet Car est créé. Nous devons créer des objets de classe basés sur le type de panier plutôt que sur la voiture. Vous devez donc apporter des modifications à tous les endroits où vous avez créé un objet de cette classe Car.. 

Mais, avec le temps, il faudra inévitablement modifier la manière dont l'objet Car est créé. Par exemple, nous devons créer des classes basées sur une voiture type plutôt que juste voiture. En tant que tel 

Au lieu de cela, il serait préférable de créer une classe qui implémente le modèle Factory.. 

La solution

Dans la section précédente, nous avons reconnu la création d’un objet de type voiture à l’aide de la Nouveau mot-clé. Et plus tard, il est décidé de créer un objet de la classe Car, mais basé sur le type de voiture comme Sedan, SUV, etc..

Soit nous devons placer le code de création de classe de type de voiture partout où cela est nécessaire ou mettre en œuvre Factory pour le gérer efficacement. Veuillez vous référer au bloc de code ci-dessous qui montre la mise en œuvre du modèle d'usine simple..

Dans la classe ci-dessus, vous pouvez voir que nous avons une méthode statique disponible qui est chargée de créer l'objet en fonction du type que vous passez. Nous avons maintenant besoin de classes concrètes de différents types de voitures, comme celles énumérées ci-dessous:

À ce stade, nous avons notre classe d’usine et notre classe de béton prêtes à être utilisées. Nous allons donc nous entraîner à la création d’objets de type voiture..

// Création d'une nouvelle berline $ sedan = carFactory :: build ('berline'); // Création d'un nouveau SUV $ suv = carFactory :: build ('suv');

Ajout de nouvelle classe

L'ajout d'une nouvelle classe est simple: créez une classe concrète et vous êtes prêt. Par exemple:

Conclusion

En ce qui concerne le modèle d’usine, envisagez l’utilisation de Nouveau mot-clé pour créer un nouvel objet nuisible. L'usine nous permet d'avoir un emplacement centralisé et tous nos objets sont créés.