[GO] Lernen Sie das Entwurfsmuster "Befehl" in Python

Ich möchte GoF-Entwurfsmuster in Python lernen.

■ Befehl (Befehlsmuster)

Das Befehlsmuster (Englisch: Befehlsmuster) ist eines der Entwurfsmuster in der objektorientierten Programmierung und gibt ein Objekt an, das eine Aktion ausdrückt. Das Command-Objekt kapselt das Verhalten und die zugehörigen Parameter. Angenommen, die Druckbibliothek verfügt über eine PrintJob-Klasse. Der Bibliotheksbenutzer erstellt ein neues PrintJob-Objekt, legt die Parameter (zu druckende Dokumente, Anzahl der Kopien usw.) fest und ruft schließlich die Methode zum Senden des Auftrags an den Drucker auf.

UML class and sequence diagram W3sDesign_Command_Design_Pattern_UML.jpg UML class diagram command.png (Das Obige ist aus Wikipedia zitiert)

■ Beispielprogramm "Befehl"

Eigentlich möchte ich versuchen, ein Beispielprogramm auszuführen, das das Befehlsmuster verwendet, und das folgende Verhalten überprüfen.

--Erstellen Sie eine test1.txt-Datei mit der Dateiberechtigung" 777 ". --Erstellen Sie eine test2.txt-Datei mit der Dateiberechtigung" 600 ".

Im Beispielprogramm ist das erste Argument der Dateiname, den Sie erstellen möchten, und das zweite Argument sind die Dateiberechtigungen, die Sie erteilen möchten.

$ python Main.py test1.txt 777
% touch test1.txt
% chmod 777 test1.txt
$ python Main.py test2.txt 600
% touch test2.txt
% chmod 600 test2.txt

Überprüfen Sie die Dateiliste.

$ ls -l|grep test
-rwxrwxrwx  1 ttsubo  staff    0  1 26 13:01 test1.txt
-rw-------  1 ttsubo  staff    0  1 26 13:01 test2.txt

Wie erwartet wurde die Datei generiert.

■ Details zum Beispielprogramm

Ähnlicher Code wurde in das Git-Repository hochgeladen. https://github.com/ttsubo/study_of_design_pattern/tree/master/Command

--Verzeichnisaufbau

.
├── Main.py
└── command
    └── command.py

(1) Die Rolle des Kommandos

Es ist die Rolle, die die Schnittstelle von Anweisungen bestimmt. Im Beispielprogramm übernimmt die Befehlsklasse diese Rolle.

command/command.py


from abc import ABCMeta, abstractmethod

class Command(metaclass=ABCMeta):
    @abstractmethod
    def execute(self):
        pass

    @abstractmethod
    def display(self):
        pass

(2) Die Rolle von ConcreteCommand

Dies ist die Rolle, die die Schnittstelle für die Rolle "Befehl" tatsächlich implementiert. Im Beispielprogramm übernehmen die Klassen "FileTouchCommand" und "ChmodCommand" diese Rolle.

command/command.py


class FileTouchCommand(Command):
    def __init__(self, filename, receiverObj):
        self.__filename = filename
        self.__receiver = receiverObj

    def execute(self):
        self.__receiver.createFile(self.__filename)

    def display(self):
        print("% touch {0}".format(self.__filename))


class ChmodCommand(Command):
    def __init__(self, filename, permission, receiverObj):
        self.__filename = filename
        self.__permission = permission
        self.__receiver = receiverObj

    def execute(self):
        self.__receiver.changeFileMode(self.__filename, self.__permission)

    def display(self):
        permission = format(self.__permission, 'o')
        print("% chmod {0} {1}".format(permission, self.__filename))

(3) Die Rolle des Empfängers

Dies ist die Zielrolle, wenn der Befehl der Rolle "ConcreteCommand" ausgeführt wird. Sie können es den Empfänger der Bestellung nennen. Im Beispielprogramm übernimmt die Klasse "FileOperator" diese Rolle.

command/command.py


from pathlib import Path

...(snip)

class FileOperator(object):
    def createFile(self, filename):
        Path(filename).touch()

    def changeFileMode(self, filename, permission):
        Path(filename).chmod(permission)

(4) Die Rolle des Invokers

Es ist die Rolle, die die Ausführung der Anweisung startet. Es ist die Rolle des Aufrufs der Schnittstelle, die durch die Rolle des Befehls definiert ist. Im Beispielprogramm übernimmt die Klasse "CompositeCommand" diese Rolle.

command/command.py


class CompositeCommand(Command):
    def __init__(self):
        self.__cmds = []

    def append_cmd(self, cmd):
        self.__cmds.append(cmd)

    def execute(self):
        for cmd in self.__cmds:
            cmd.execute()
    
    def display(self):
        for cmd in self.__cmds:
            cmd.display()

(5) Die Rolle des Kunden

Dies ist die Rolle, die die Rolle "ConcreteCommand" erstellt und zu diesem Zeitpunkt die Empfängerrolle zuweist. Im Beispielprogramm übernimmt die Methode "startMain" diese Rolle.

Main.py


import sys
from command.command import FileOperator, CompositeCommand, FileTouchCommand, ChmodCommand


def startMain(filename, permission):
    recv = FileOperator()
    cc = CompositeCommand()
    cc.append_cmd(FileTouchCommand(filename, recv))
    cc.append_cmd(ChmodCommand(filename, permission, recv))
    cc.execute()
    cc.display()


if __name__ == "__main__":
    startMain(sys.argv[1], int(sys.argv[2], 8))

■ Referenz-URL

Recommended Posts

Lernen Sie das Entwurfsmuster "Befehl" in Python
Lernen Sie das Entwurfsmuster "Builder" mit Python
Lernen Sie das Designmuster "Flyweight" in Python
Lernen Sie das Entwurfsmuster "Observer" in Python
Lernen Sie das Entwurfsmuster "Memento" mit Python
Lernen Sie das Entwurfsmuster "Proxy" in Python
Lernen Sie das Entwurfsmuster "Besucher" mit Python
Lernen Sie das Entwurfsmuster "Bridge" mit Python
Lernen Sie das Entwurfsmuster "Mediator" mit Python
Lernen Sie das Designmuster "Decorator" mit Python
Lernen Sie das Entwurfsmuster "Iterator" mit Python
Lernen Sie das Entwurfsmuster "Strategie" mit Python
Lernen Sie das Entwurfsmuster "Composite" mit Python
Lernen Sie das Entwurfsmuster "State" in Python
Lernen Sie das Entwurfsmuster "Adapter" mit Python
Lernen Sie das Entwurfsmuster "Abstract Factory" mit Python
Lernen Sie das Entwurfsmuster "Vorlagenmethode" in Python
Lernen Sie das Entwurfsmuster "Factory Method" in Python
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Lernen Sie das Entwurfsmuster "Singleton" mit Python
Lernen Sie das Designmuster "Facade" mit Python
Im Python-Befehl zeigt Python auf Python3.8
Implementieren Sie das Singleton-Muster in Python
Singleton-Muster in Python
Besuchermuster in Python
Finde Fehler in Python
Führen Sie externe Befehle mit Python aus
Entwurfsmuster in Python: Einführung
Externe Befehlsausführung in Python
Python Design Pattern - Template-Methode
Abrufen der arXiv-API in Python
Drücken Sie einen Befehl in Python (Windows)
Speichern Sie die Binärdatei in Python
Klicken Sie in Python auf die Sesami-API
Führen Sie den Shell-Befehl / Python in R aus
Holen Sie sich den Desktop-Pfad in Python
Holen Sie sich den Skriptpfad in Python
Lassen Sie Python die Befehlsausgabe lesen
Klicken Sie auf die Web-API in Python
Ich habe die Warteschlange in Python geschrieben
Berechnen Sie den Vormonat in Python
Untersuchen Sie die Klasse eines Objekts mit Python
Holen Sie sich den Desktop-Pfad in Python
Holen Sie sich den Hostnamen in Python
Greifen Sie mit Python auf die Twitter-API zu
Der erste Schritt von Python Matplotlib
Ich habe den Stack in Python geschrieben
Befehl für das aktuelle Verzeichnis Python
Beherrsche das schwache Ref-Modul in Python
Lernen Sie die Grundlagen von Python ① Grundlegende Anfänger
Python Hinweis: Stellen Sie fest, ob das Befehlszeilenargument in der Liste enthalten ist
Laden Sie das Remote-Python-SDK mit IntelliJ
Versuchen Sie es mit der Wunderlist-API in Python
Überprüfen Sie das Verhalten des Zerstörers in Python
[Python Kivy] Über das Ändern des Designthemas
Versuchen Sie, die Kraken-API mit Python zu verwenden
[LLDB] Erstellen Sie Ihren eigenen Befehl mit Python
Lernen Sie die Grundlagen, während Sie Python-Variablen berühren