[JAVA] Étudier les modèles de conception du GoF

introduction

[Introduction aux modèles de conception appris en langage Java](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89 % 88Java% E8% A8% 80% E8% AA% 9E% E3% 81% A7% E5% AD% A6% E3% 81% B6% E3% 83% 87% E3% 82% B6% E3% 82% A4 % E3% 83% B3% E3% 83% 91% E3% 82% BF% E3% 83% BC% E3% 83% B3% E5% 85% A5% E9% 96% 80-% E7% B5% 90% J'ai lu E5% 9F% 8E-% E6% B5% A9 / dp / 4797327030), mais quand je l'ai lu tel quel, le contenu ne m'est pas venu à l'esprit, donc c'était un talent pour apprendre ou étudier. J'ai essayé d'écrire un article sur les résultats résumés.

Conseils d'apprentissage

Liste de 23 modèles de conception GoF à utiliser en Java (avec des commentaires récapitulatifs pour chaque modèle) ↑ J'ai beaucoup fait référence à ce site. Les 4 catégories par niveau sont particulièrement utiles. Pour moi, qui me demandait «je ne sais pas par où commencer» et «êtes-vous sûr de vouloir utiliser ce modèle?», La priorité de l'apprentissage m'a beaucoup amélioré. Voici un tableau des priorités d'apprentissage x objectifs du modèle.

Si vous avez un bon sens de la programmation, vous pouvez l'utiliser naturellement sans qu'on vous le dise Le nom du motif lui-même est célèbre et est utilisé ici et là C'est difficile à trouver par vous-même, mais une fois que vous l'avez appris, la programmation est étonnamment ouverte. Des choses difficiles à comprendre et à utiliser
produire -Builder: procédure d'initialisation subdivisée -Méthode d'usine: sélectionnez dynamiquement la sous-classe
・ Singleton: 1 instance garantie
・ Usine abstraite: Usine de l'usine
-Prototype: passer une copie
Construction ・ Adaptateur: héritage/Wrapper par délégation
・ Décorateur: crochet délégué et intentionnel
・ Façade: procédure d'utilisation de plusieurs classes
・ Proxy: Sneak hook -Bridge: séparation hiérarchique des extensions et implémentations
・Composite:再帰ツリーConstruction
・ Poids mouche: usine avec de l'argent
Comportement -Méthode du modèle: l'enfant incarne le fragment de traitement
・ Stratégie: commutation d'algorithme
・ Médiateur: interaction en forme d'étoile
-Observateur: écouteur d'événements
・ Itérateur: processus côte à côte dans l'ordre
-Etat: objet d'état
-Commande: file d'attente et pile de tâches
・ Mémento: getter et setter d'état
・ Interprète: exécution de la langue originale
・ Chaîne de responsabilité: aider le réseau de navires
・ Visiteur: scanner de structure pratique

J'ai nettoyé cela du côté gauche. C'était très facile à apprendre car c'était un modèle qui m'est venu à l'esprit rapidement et qui m'est familier quelque part → un modèle complexe et inconnu. De plus, si vous savez à quels "buts du modèle" il correspond (génération / structure / comportement), c'est bien parce que vous ne perdrez pas de vue ce que vous faites maintenant.

Résumé de chaque motif

・ En bref, de quel type de modèle s'agit-il? ・ Quand ce modèle est-il utilisé? Quels sont les bénéfices? J'ai essayé de résumer chaque modèle avec les deux axes.

Si vous avez un bon sens de la programmation, vous pouvez l'utiliser naturellement sans qu'on vous le dise

Pour le dire simplement? Quand l'utilisez vous? Quels sont les bénéfices?
Builder Séparation du flux de traitement et du traitement spécifique Connexion entre la couche de cas d'utilisation et la couche d'infrastructure (inversion de dépendance)
Adapter Classe de wrapper Couche anti-corruption
Decorator Personnalisation des fonctions en identifiant les fonctions principales et supplémentaires Des variations infinies peuvent être créées en fonction de la combinaison de fonctions supplémentaires
Facade Fournir une API sous forme de fenêtre Dissimulation du traitement
Template Method Héritage Dissimulation du traitement
Strategy Séparation des algorithmes Vous pouvez changer d'algorithme
Mediator Gestion centralisée de la coopération multi-classes Organiser les interactions entre les classes (maintenance du trafic)

Le nom du motif lui-même est célèbre et est utilisé ici et là

Pour le dire simplement? Quand l'utilisez vous? Quels sont les bénéfices?
Factory Method Définir les méthodes d'instanciation et d'utilisation du côté de la classe abstraite Séparation du cadre et de la mise en œuvre
Singleton Garantie 1 instance Peut être mis en œuvre en tenant compte des effets secondaires sur la prémisse d'une instance
Proxy Reprendre le traitement lourd Vous pourrez faire des choses comme la route paresseuse
Observer Notifier et traiter les changements de statut de classe Traitement asynchrone (Pub-Sub) pourra
Iterator Traitement séquentiel des éléments agrégés Séparation du traitement séquentiel/Stylisé

C'est difficile à trouver par vous-même, mais une fois que vous l'avez appris, la programmation est étonnamment ouverte.

Pour le dire simplement? Quand l'utilisez vous? Quels sont les bénéfices?
Bridge Séparation hiérarchique des extensions et implémentations transfert/Vous pouvez réfléchir à la signification de l'héritage séparément pour chaque couche (extension de base ↔︎)/Implémentation abstraite ↔︎)
Composite Arborescence rétrospective en assimilant le conteneur et le contenu Réalisation de structure récursive (arborescence)
State Exprimer l'état dans une classe et basculer (changer l'état) à utiliser Le branchement conditionnel par instruction if ou switch devient inutile
Command Exprimez l'instruction en tant qu'objet et exécutez()Pour pouvoir courir avec Gestion flexible des tâches en utilisant les files d'attente et les piles/Peut être exécuté
Memento Enregistrement et restauration de l'état Accéder à (acquérir) l'état sans interrompre l'encapsulation/Peut être mis à jour)
Interpreter Analyse de la syntaxe du langage prototype Analyse de la syntaxe en déposant la langue d'origine (définie par BNF) dans la classe/Peut faire
Chain of Responsibility Construisez une chaîne de processeurs Le traitement flexible peut être exprimé en réorganisant la chaîne
Concentrez-vous sur votre travail (ne vous inquiétez pas de la responsabilité des autres éléments de la chaîne)
Visitor Travaillez en parcourant la structure de données Le traitement peut être séparé de la structure des données

Des choses difficiles à comprendre et à utiliser

Pour le dire simplement? Quand l'utilisez vous? Quels sont les bénéfices?
Abstract Factory Définir des méthodes pour instancier et utiliser la structure entière du côté de la classe abstraite Séparation du cadre et de la mise en œuvre
Prototype Cloner l'instance enregistrée()Copier et transmettre Masquer l'instanciation et libérer des contraintes de nom de classe (nouvelle clause)
Flyweight Regroupez l'instance une fois créée et réutilisez-la L'utilisation de la mémoire peut être réduite

en conclusion

L'étude des modèles de conception entraînera une mémorisation complète de 23 modèles, mais vous pouvez créer un bon rythme d'apprentissage en créant des blocs par niveau ou par objectif. De plus, comme les modèles de conception sont à la base de toute programmation orientée objet, le même concept peut apparaître dans différentes pratiques en des termes différents (par exemple, le modèle d'adaptateur est ce que DDD appelle une couche anti-corruption). Apparaîtra). Si vous étudiez par rapport à ce que vous savez déjà, vous pouvez le considérer comme une relation dans un grand cadre, pas seulement une mémorisation de sujets individuels, afin que vous puissiez l'établir efficacement et sous une forme facile à tirer comme connaissance. Je pense.

Recommended Posts

Étudier les modèles de conception du GoF
Modèles de conception Java
Introduction aux modèles de conception (introduction)
Introduction aux modèles de conception (Builder)
Introduction aux modèles de conception (composite)
Introduction aux modèles de conception (poids mouche)
Pourquoi vous avez besoin d'un modèle de conception
[Java] Résumé des modèles de conception
Introduction aux modèles de conception (stratégie)
Introduction aux modèles de conception (Abstract Factory)
Modèle de conception important pour améliorer la maintenabilité