Apprenez le modèle de conception "Méthode de modèle" en Python

En tant que matériel d'apprentissage des modèles de conception du GoF, le livre «Introduction aux modèles de conception appris dans le langage Java augmenté et révisé» semble être utile. Cependant, comme les exemples repris sont basés sur JAVA, j'ai essayé la même pratique avec Python pour approfondir ma compréhension.

■ Méthode de modèle (modèle de méthode de modèle)

Le modèle de méthode de modèle est l'un des modèles de conception définis par le GoF (Gang of Four; 4 gangs). Il appartient aux "Patterns liés au comportement". Le but du modèle de méthode de modèle est de prédéterminer un algorithme approximatif pour un processus et de laisser la conception spécifique de cet algorithme à une sous-classe. Par conséquent, il est souvent utilisé comme un moyen de construire un cadre système.

UML class diagram templatemethod.png (Ce qui précède est cité sur Wikipedia)

■ Exemple de programme "Méthode modèle"

Je voudrais exécuter un exemple de programme qui utilise le modèle de méthode modèle et vérifier le comportement suivant.

--Affichez la lettre «H» cinq fois de suite. De plus, avant et après, il est affiché entouré de "** << " et " >> **". --Affichez la chaîne de caractères "Hello, World!" 5 fois de suite. De plus, il est affiché entouré d'un cadre.

$ python Main.py 
<<HHHHH>>

+-------------+
|Hello, World!|
|Hello, World!|
|Hello, World!|
|Hello, World!|
|Hello, World!|
+-------------+

■ Détails de l'exemple de programme

Un code similaire a été téléchargé dans le référentiel Git. https://github.com/ttsubo/study_of_design_pattern/tree/master/TemplateMethod

.
├── Main.py
└── templatemethod
    ├── __init__.py
    └── display.py

(1) Le rôle de AbstractClass

Le rôle ʻAbstractClassimplémente la méthode de modèle. Déclarez également la méthode abstraite utilisée dans la méthode modèle. Cette méthode abstraite est implémentée par le rôle de la sous-classeConcreteClass. Dans l'exemple de programme, la classe ʻAbstractDisplay remplit ce rôle.

templatemethod/display.py


from abc import ABCMeta, abstractmethod

class AbstractDisplay(metaclass=ABCMeta):
    @abstractmethod
    def print(self):
        pass

    @abstractmethod
    def open(self):
        pass

    @abstractmethod
    def close(self):
        pass

    def display(self):
        self.open()
        for _ in range(5):
            self.print()
        self.close()

(2) Le rôle de ConcreteClass

Implémentez concrètement la classe abstraite définie par le rôle de ʻAbstractClass. La méthode implémentée ici est appelée à partir de la méthode template qui joue le rôle de ʻAbstractClass. Dans l'exemple de programme, les classes CharDisplay et StringDisplay remplissent ce rôle.

templatemethod/display.py


class CharDisplay(AbstractDisplay):
    def __init__(self, ch):
        self.__ch = ch

    def open(self):
        print('<<', end='')

    def print(self):
        print(self.__ch, end='')

    def close(self):
        print('>>')

class StringDisplay(AbstractDisplay):
    def __init__(self, string):
        self.__string = string
        self.__width = len(string)

    def open(self):
        self.__printLine()

    def print(self):
        print("|{0}|".format(self.__string))

    def close(self):
        self.__printLine()

    def __printLine(self):
        print('+', end='')
        for _ in range(self.__width):
            print('-', end='')
        print('+')

(3) Le rôle du client (utilisateur)

Dans l'exemple de programme, la méthode startMain remplit ce rôle.

Main.py


from templatemethod.display import CharDisplay, StringDisplay

def startMain():
    d1 = CharDisplay('H')
    d2 = StringDisplay("Hello, World!")
    d1.display()
    print("")
    d2.display()

if __name__ == '__main__':
    startMain()

■ URL de référence

Recommended Posts

Apprenez le modèle de conception "Méthode de modèle" en Python
Apprenez le modèle de conception "Méthode d'usine" en Python
Apprenez le modèle de conception "Prototype" avec Python
Apprenez le modèle de conception "Builder" avec Python
Apprenez le modèle de conception "Flyweight" en Python
Apprenez le modèle de conception "Observer" en Python
Apprenez le modèle de conception "Memento" avec Python
Apprenez le modèle de conception "Proxy" en Python
Apprenez le modèle de conception "Commande" en Python
Apprenez le modèle de conception "Visiteur" avec Python
Apprenez le modèle de conception "Bridge" avec Python
Apprenez le modèle de conception "Mediator" avec Python
Apprenez le modèle de conception "Décorateur" avec Python
Apprenez le modèle de conception "Iterator" avec Python
Apprenez le modèle de conception «Stratégie» avec Python
Apprenez le modèle de conception "Composite" avec Python
Apprenez le modèle de conception "État" en Python
Apprenez le modèle de conception "Adapter" avec Python
Python Design Pattern - Méthode de modèle
Apprenez le modèle de conception "Abstract Factory" avec Python
Apprenez le modèle de conception «Chaîne de responsabilité» en Python
Design Pattern #Template, méthode
Apprenez le modèle de conception "Singleton" avec Python
Apprenez le modèle de conception "Façade" avec Python
Modèle de méthode de modèle en Java
Implémenter le modèle Singleton en Python
Motif singleton en Python
Design Pattern #Factory, méthode
Modèle de visiteur en Python
[Explication détaillée] Modèle de méthode de modèle
J'ai essayé la méthode des moindres carrés en Python
Pour remplacer dynamiquement la méthode suivante en python
Méthode Simplex (méthode unique) en Python
Méthode privée en python
Essayez d'implémenter la méthode Monte Carlo en Python
[Gang of Four] Apprentissage des modèles de conception - Méthode du modèle
Déterminer le seuil à l'aide de la méthode P-tile en python
Implémentation de la méthode k-voisinage en python à partir de scikit learn
J'ai écrit un modèle de conception dans l'édition de modèle kotlin
Trouver des erreurs en Python
Modèles de conception en Python: introduction
Suppression des substitutions de méthode en Python
Comment utiliser la méthode __call__ dans la classe Python
Obtenir l'API arXiv en Python
Python dans le navigateur: la recommandation de Brython
Enregistrez le fichier binaire en Python
Frappez l'API Sesami en Python
Obtenez le chemin du bureau en Python
Obtenez le chemin du script en Python
Dans la commande python, python pointe vers python3.8
Implémentation de la méthode de propagation d'étiquettes en Python
Simuler la méthode Monte Carlo en Python
Accédez à l'API Web en Python
Méthode Hash (méthode d'adresse ouverte) en Python
J'ai écrit la file d'attente en Python
Calculer le mois précédent en Python