[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.
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.
・ 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.
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) |
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é |
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 |
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 |
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