[GO] Lernen Sie das Entwurfsmuster "Adapter" mit Python

Als Material zum Erlernen von GoF-Entwurfsmustern scheint das Buch "Einführung in Entwurfsmuster, die in der erweiterten und überarbeiteten Java-Sprache gelernt wurden" hilfreich zu sein. Da die aufgeführten Beispiele jedoch auf JAVA basieren, habe ich dieselbe Vorgehensweise mit Python versucht, um mein Verständnis zu vertiefen.

■ Adapter (Adaptermuster)

Das Adaptermuster ist eines der von GoF (Gang of Four; 4 Banden) definierten Entwurfsmuster. Mit dem Adaptermuster können Sie die Schnittstelle ändern, ohne vorhandene Klassen zu ändern. Es gibt "** Methode mit Vererbung " und " Methode mit Delegierung **" als Methode zum Realisieren des Adaptermusters.

UML class diagram W3sDesign_Adapter_Design_Pattern_UML.jpg

1. Adapter mit Vererbung

Der Adapter, der die Vererbung verwendet, wird realisiert, indem eine Unterklasse der Klasse erstellt wird, die Sie verwenden möchten, und die erforderliche Schnittstelle für diese Unterklasse implementiert wird. inheritence.png

2. Adapter mit Delegierung

Der Adapter, der die Delegierung verwendet, wird realisiert, indem eine Instanz der Klasse erstellt wird, die Sie verwenden möchten, und diese Instanz aus einer anderen Klasse verwendet wird. delegation.png (Das Obige wird aus Wikipedia zitiert)

■ Beispielprogramm "Adapter"

Eigentlich möchte ich ein Beispielprogramm ausführen, das das Adaptermuster verwendet, und das folgende Verhalten überprüfen.

$ python Main.py 
(Hello)
*Hello*

■ Details zum Beispielprogramm

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

--Verzeichnisaufbau

.
├── Main.py
└── adapter
    ├── __init__.py
    ├── banner.py
    ├── print.py
    └── print_banner.py

(1) Rolle des Ziels

Die Rolle "Ziel" definiert die Schnittstelle, die am Verhalten der Instanz beteiligt ist. Im Beispielprogramm übernimmt die Klasse "Drucken" diese Rolle.

adapter/print.py


from abc import ABCMeta, abstractmethod

class Print(metaclass=ABCMeta):
    @abstractmethod
    def printWeak(self):
        pass

    @abstractmethod
    def printStrng(self):
        pass

(2) Die Rolle des Kunden

Es ist eine Rolle, mit der Methode der Rolle "Ziel" zu arbeiten. Im Beispielprogramm übernimmt die Methode "startMain" diese Rolle.

Main.py


from adapter.print_banner import PrintBanner

def startMain():
    p = PrintBanner("Hello")
    p.printWeak()
    p.printStrng()

if __name__ == '__main__':
    startMain()

(3) Die Rolle des Adaptees

Hier wird die Methode implementiert, die tatsächlich in der Rolle des Adapters funktioniert. Im Beispielprogramm übernimmt die Klasse "Banner" diese Rolle.

adapter/banner.py


class Banner(object):
    def __init__(self, string):
        self.__string = string

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

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

(4) Rolle des Adapters (Montageseite)

Die Rolle "Adapter" ist eine Klasse, die die Schnittstelle für die Rolle "Ziel" implementiert. Im Beispielprogramm übernimmt die PrintBanner-Klasse diese Rolle. Es gibt die folgenden zwei Methoden zum Realisieren des Adaptermusters.

□ Beispielprogramm mit Vererbung

adapter/print_banner.py


from adapter.banner import Banner
from adapter.print import Print

class PrintBanner(Banner, Print):
    def __init__(self, string):
        super(PrintBanner, self).__init__(string)

    def printWeak(self):
        self.showWithParen()

    def printStrng(self):
        self.showWithAster()

□ Beispielprogramm mit Delegierung

adapter/print_banner.py


from adapter.banner import Banner
from adapter.print import Print

class PrintBanner(Print):
    def __init__(self, string):
        self.__banner = Banner(string)

    def printWeak(self):
        self.__banner.showWithParen()

    def printStrng(self):
        self.__banner.showWithAster()

■ Referenz-URL

Recommended Posts

Lernen Sie das Entwurfsmuster "Adapter" mit Python
Lernen Sie das Entwurfsmuster "Prototype" mit 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 "Befehl" 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 "Abstract Factory" mit Python
Lernen Sie das Entwurfsmuster "Factory Method" in Python
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Lernen Sie das Designmuster "Facade" mit Python
Implementieren Sie das Singleton-Muster in Python
Entwurfsmuster #Adapter
Singleton-Muster in Python
Besuchermuster in Python
Finde Fehler in Python
Ich habe ein Designmuster in der Kotlin Adapter Edition geschrieben
Entwurfsmuster in Python: Einführung
Python Design Pattern - Template-Methode
Abrufen der arXiv-API in Python
Python im Browser: Brythons Empfehlung
Speichern Sie die Binärdatei in Python
Klicken Sie in Python auf die Sesami-API
Holen Sie sich den Desktop-Pfad in Python
Holen Sie sich den Skriptpfad in Python
Im Python-Befehl zeigt Python auf Python3.8
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 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
Beherrsche das schwache Ref-Modul in Python
Lernen Sie die Grundlagen von Python ① Grundlegende Anfänger
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
Lernen Sie die Grundlagen, während Sie Python-Variablen berühren
Nehmen Sie die logische Summe von List in Python (Zip-Funktion)
GoF-Entwurfsmuster aus dem Problem 2. Struktur
Zeigen Sie Python 3 im Browser mit MAMP an
Tweet mit der Twitter-API in Python
Überprüfen Sie, ob die URL in Python vorhanden ist
Ordnen Sie die in pythons models.py festgelegte Tabelle zu
Führen Sie den Python-Interpreter im Skript aus
Das Ergebnis der Installation von Python auf Anaconda