[PYTHON] Chapitre 4 Résumé de l'introduction aux modèles de conception appris en langage Java

ça fait longtemps. C'est blanc. L'autre jour, les ingénieurs seniors ne connaissent pas le modèle de conception! ?? Après cela, j'ai reçu une "Introduction aux modèles de conception appris en langage Java" écrite par Hiroshi Yuki, alors j'ai décidé d'étudier. Cependant, même si j'ai lu le livre, je ne m'en souviens pas, alors j'ai décidé de l'écrire sous forme de mémorandum. C'est la 4ème fois. Je ferai de mon mieux pour pouvoir terminer la course. De plus, il existe un exemple de programme dans "Introduction aux modèles de conception appris en langage Java", mais nous l'omettons pour des raisons de droits d'auteur. Essaye de comprendre.

La dernière fois, j'ai écrit un article sur "Template Method pattern". L'article précédent est ci-dessous. https://qiita.com/sirajirasajiki/items/53e1d2aea166190f9a6f

Cette fois, je voudrais décrire le "modèle de méthode d'usine". Il existe également un exemple de programme pour le "modèle de méthode d'usine", mais nous l'omettons pour des raisons de copyright. Essaye de comprendre.

Chapitre 4 Création d'une instance de méthode d'usine - Laisser dans les sous-classes

"Introduction aux modèles de conception appris en langage Java"

La méthode d'usine est simplement le modèle de méthode modèle appliqué à l'instanciation.

C'est vrai.

Je pense que certaines personnes peuvent trouver cela difficile à imaginer, alors je vais donner un exemple. Imaginez une usine. A l'usine, les produits sont créés. Dans les grandes chaînes de magasins telles que Shimamura et UNIQLO, les t-shirts sont souvent fabriqués dans les usines, n'est-ce pas? Je pense que la taille est à peu près décidée pour chaque taille, comme celle-ci pour la taille S et celle-ci pour la taille M. Cependant, je pense que les matériaux et les designs diffèrent d'une entreprise à l'autre. Je pense que l'usine fabrique également d'autres ordinateurs personnels. S'il s'agit d'un ordinateur personnel, la mémoire sera de 16 Go et elle sera divisée comme un SSD ou un disque dur. De cette façon, tout ce que vous fabriquez dans l'usine est un produit, n'est-ce pas? Si fabriquer quelque chose en usine est une super classe, l'usine de t-shirts est une sous-classe. Cependant, vous pouvez également créer une sous-classe appelée fabrique d'ordinateurs. En utilisant une classe abstraite, vous pouvez créer des sous-classes complètement différentes avec un concept commun.

De cette manière, la superclasse peut décider comment créer une instance, et en laissant le traitement spécifique à l'instance, le cadre de création de l'instance et la création de l'instance peuvent être considérés séparément. De plus, en laissant le traitement spécifique à l'instance, la superclasse peut créer une situation qui ne dépend pas de l'instance.

Précautions lors de l'utilisation de la méthode d'usine

Les sous-classes créées avec le "modèle de méthode d'usine" peuvent décider comment créer des instances dans des superclasses. Vous devez donc bien comprendre la super classe.

Exemple utilisant la méthode d'usine

Créez un diagramme de classes et du code Python à l'aide de l'exemple d'usine de «Introduction aux modèles de conception appris dans le langage Java». Cette fois, nous allons créer une classe d'usine et une classe de produit, et créer une classe d'usine d'ordinateurs personnels et une classe d'ordinateurs personnels qui héritent de chacune. Dans la classe factory, une méthode abstraite appelée "createProduct" qui crée un produit et une méthode abstraite appelée "registerProduct" qui enregistre le produit créé sont déclarées, et ces deux classes abstraites sont implémentées dans des sous-classes. De plus, il existe une méthode qui implémente le flux de création d'un produit en utilisant "createProduct" appelé "create" et en enregistrant le produit avec "registerProduct". La classe d'usine PC hérite de la classe d'usine, implémente «registerProduct» et «createProduct», et hérite d'une méthode appelée «get_owners» qui indique qui l'a acheté.

La classe de produit implémente uniquement une méthode abstraite appelée «utilisation» qui utilise le produit créé. La classe d'ordinateurs personnels hérite de la classe de produit, implémente "use", et implémente une méthode pour créer sa propre instance et une méthode "get_owner" pour savoir à qui l'envoyer. Lors de sa mise en œuvre réelle, il devrait être possible d'acquérir ou d'enregistrer la destination, les spécifications de l'ordinateur personnel ou corporatif, etc., mais cette fois, il s'agit d'un exemple utilisant la méthode d'usine, nous ne le ferons donc pas.

Diagramme de classe

factory_method.png

Ce diagramme de classes est décrit comme PlantUML. Le code PlantUML que j'ai écrit se trouve sur le GitHub ci-dessous, veuillez donc lire Lisez-moi avant de l'utiliser. factory_method.txt. https://github.com/sirajirasajiki/design_pattern_uml/tree/master/template_method Pour plus de détails sur l'installation et l'utilisation de PlantUML, voir l'annexe ci-dessous.

Implémenté en Python sur la base du diagramme de classes

Le code implémenté ci-dessous est disponible. Implémenté en Python 3.7. https://github.com/sirajirasajiki/design_pattern_python/tree/master/FactoryMethod

Résumé

J'ai découvert le "modèle de méthode d'usine", qui décide comment créer une instance dans une superclasse et décrit un traitement spécifique dans une sous-classe.

Chapitre 4 Impressions

Lorsque vous utilisez des modèles, pas seulement des modèles de méthode d'usine, je pensais que je devais comprendre correctement les superclasses. Donc, je vais écrire un commentaire sur ce que cela signifie pour la super classe. ~~ L'exemple utilisé dans l'explication sera implémenté en Python à une date ultérieure. ~~ Implémenté en Python.

finalement

S'il y a quelque chose qui ne va pas, je vous serais reconnaissant de bien vouloir le signaler!

appendix

Article suivant

https://qiita.com/sirajirasajiki/items/532d33fd823e52ab0d1a

Site sur PlantUML

Les sites suivants ont été pris en charge lors de l'installation de PlantUML. https://qiita.com/kohashi/items/1d2c6e859eeac72ed926 Les sites suivants ont été pris en compte lors de l'écriture de PlantUML. https://qiita.com/ogomr/items/0b5c4de7f38fd1482a48

Recommended Posts

Résumé du chapitre 2 de l'introduction aux modèles de conception appris en langage Java
Chapitre 4 Résumé de l'introduction aux modèles de conception appris en langage Java
Résumé du chapitre 3 de l'introduction aux modèles de conception appris en langage Java
Résumé du début au chapitre 1 de l'introduction aux modèles de conception appris en langage Java
Résumé des modèles de prototypes d'introduction aux modèles de conception appris en langage Java
Résumé des modèles singleton de l'introduction aux modèles de conception appris en langage Java
[Mis à jour de temps en temps] Résumé des modèles de conception en Java
Modèles de conception appris avec Java et PHP (résumé)
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 6] Introduction à scicit-learn avec 100 coups de traitement du langage
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
Modèles de conception en Python: introduction
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
Introduction à l'API Socket apprise en langage C, partie 1, édition serveur
Introduction à la vérification de l'efficacité Chapitre 1 écrit en Python
Introduction à la vérification de l'efficacité Chapitre 3 écrit en Python
100 Commandes de traitement du langage Knock UNIX apprises au chapitre 2
Résumé de la façon d'importer des fichiers dans Python 3
100 Traitement du langage Knock Expressions régulières apprises au chapitre 3
Résumé de l'utilisation de MNIST avec Python
100 traitements du langage frappent l'analyse morphologique apprise au chapitre 4
Introduction à la vérification de l'efficacité Chapitre 2 écrit en Python
Comprendre les modèles de conception en comparant les implémentations en JavaScript et Java [mis à jour de temps en temps]
Résumé des outils nécessaires pour analyser les données en Python
Introduction au langage Python
[Introduction à Python] Résumé des fonctions et méthodes qui apparaissent fréquemment en Python [Format du problème]
Modèles de conception à utiliser avec les bibliothèques Java fréquemment utilisées - Modèle de constructeur
Modèles de conception à utiliser avec les bibliothèques Java fréquemment utilisées - Modèles d'adaptateur
Modèles de conception à utiliser avec les bibliothèques Java fréquemment utilisées - Modèles de stratégie
Introduction aux statistiques Exercices du chapitre 2 de la presse de l'Université de Tokyo
Résumé de l'écriture des fichiers .proto utilisés dans gRPC
Introduction à l'API Socket apprise en langage C 2e édition client
[Introduction à cx_Oracle] Présentation de cx_Oracle
Essayons le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 10 Mémo "Détails et amélioration du réseau neuronal"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 2 Étape 06 Mémo «Identifiant»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 2 Étape 02 Mémo "Prétraitement"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 2 Étape 07 Mémo «Évaluation»
Introduction à l'API Socket apprise en langage C 3e serveur / client TCP # 1
Comment implémenter du code Java en arrière-plan de Red Hat (Linux ONE)
[Python] PCA scratch dans l'exemple de "Introduction à la méthode d'analyse multivariée"
Modèles de conception à utiliser avec les bibliothèques Java fréquemment utilisées - Modèle de méthode de modèle
J'ai essayé de faire 5 modèles de base d'analyse en 3 ans
Modèles de conception à utiliser avec les bibliothèques Java fréquemment utilisées - Modèle de façade
Introduction à l'API Socket apprise en langage C 4e édition serveur / client UDP # 1
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 4 Etape 14 Mémo "Recherche Hyper Paramètre"
Résumé de la façon d'écrire des instructions if (Scala, Java, Rust, langage C, C ++, langage Go, PHP, Perl, Python, Ruby)
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» --Chapitre 2 Étape 04 Mémo «Extraction de fonctionnalités»
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 3 Étape 08 Mémo «Introduction aux réseaux de neurones»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 2 Étape 05 Mémo "Conversion de quantité de fonctionnalités"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 3 Étape 11 Mémo "Embeddings de mots"
Explication facile à comprendre de l'application Web Python (Django) même pour les débutants (4) [Route setting / Introduction to MTV design patterns]
100 Language Processing Knock Chapitre 1 en Python
[Introduction à Python3 Jour 13] Chapitre 7 Chaînes de caractères (7.1-7.1.1.1)
Résumé de l'utilisation de pyenv-virtualenv
[Introduction à Python3 Jour 14] Chapitre 7 Chaînes de caractères (7.1.1.1 à 7.1.1.4)
Introduction à Protobuf-c (langage C ⇔ Python)
Introduction d'une méthode de conception de contrôleur pilotée par les données
Résumé des différentes opérations dans Tensorflow
Modèle de chaîne de responsabilité en Java