Eine Sammlung von Entwurfsmustern und Redewendungen in Python.
Denken Sie daran, dass jedes Muster seine eigenen Kompromisse hat. Und Sie müssen mehr darauf achten, warum Sie ein bestimmtes Muster wählen, als darauf, wie Sie es umsetzen.
Schöpfungsmuster :
Muster | Beschreibung |
---|---|
abstract_factory | Verwenden Sie eine generische Funktion mit bestimmten Fabriken |
borg | ein Singleton mit gemeinsamem Status zwischen Instanzen |
Baumeister | Anstatt mehrere Konstruktoren zu verwenden, empfängt das Builder-Objekt Parameter und gibt konstruierte Objekte zurück |
Fabrik | Delegieren Sie eine spezielle Funktion/Methode, um Instanzen zu erstellen |
lazy_evaluation | verzögert ausgewertetes Eigenschaftsmuster in Python |
Pool | Instanziieren und verwalten Sie eine Gruppe von Instanzen desselben Typs vorab |
Prototyp | Verwenden Sie eine Fabrik und Klone eines Prototyps für neue Instanzen (wenn die Instanziierung teuer ist). |
Strukturmuster :
Muster | Beschreibung |
---|---|
3-stufig | Daten<->Geschäftslogik<->Präsentationstrennung (strikte Beziehungen) |
Adapter | Anpassen einer Schnittstelle an eine andere mithilfe einer Whitelist |
Brücke | ein Client-Provider-Mittelsmann, um Schnittstellenänderungen abzumildern |
zusammengesetzt | ermöglicht es Kunden, einzelne Objekte und Kompositionen einheitlich zu behandeln |
Dekorateur | Umfassen Sie die Funktionalität mit anderen Funktionen, um die Ausgaben zu beeinflussen |
Fassade | Verwenden Sie eine Klasse als API für mehrere andere |
Fliegengewicht | Vorhandene Instanzen von Objekten mit ähnlichem/identischem Zustand transparent wiederverwenden |
front_controller | Single-Handler-Anfragen, die bei der Anwendung eingehen |
mvc | Modell<->Ansicht<->Controller (nicht strikte Beziehungen) |
Stellvertreter | Ein Objekt leitet Operationen an etwas anderes weiter |
Verhaltensmuster :
Muster | Beschreibung |
---|---|
Kette_der_Verantwortung | Wenden Sie eine Kette aufeinanderfolgender Handler an, um zu versuchen, die Daten zu verarbeiten |
Katalog | Allgemeine Methoden rufen basierend auf Konstruktionsparametern verschiedene spezialisierte Methoden auf |
Verkettungsmethode | Setzen Sie den Rückruf der nächsten Objektmethode fort |
Befehl | Bündeln Sie einen Befehl und Argumente, um sie später aufzurufen |
Iterator | Durchqueren Sie einen Container und greifen Sie auf die Elemente des Containers zu |
Iterator (alt. impl.) | Durchqueren Sie einen Container und greifen Sie auf die Elemente des Containers zu |
Vermittler | ein Objekt, das andere Objekte verbinden und als Proxy fungieren kann |
Erinnerung | Generieren Sie ein undurchsichtiges Token, mit dem Sie zu einem vorherigen Status zurückkehren können |
Beobachter | Bereitstellung eines Rückrufs zur Benachrichtigung über Ereignisse/Datenänderungen |
veröffentlichen_subscribe | Eine Quelle syndiziert Ereignisse/Daten an mehr als 0 registrierte Zuhörer |
Registrierung | Verfolgen Sie alle Unterklassen einer bestimmten Klasse |
Spezifikation | Geschäftsregeln können neu kombiniert werden, indem die Geschäftsregeln mithilfe boolescher Logik miteinander verkettet werden |
Zustand | Die Logik ist in eine diskrete Anzahl potenzieller Zustände und den nächsten Zustand unterteilt, in den übergegangen werden kann |
Strategie | wählbare Operationen für dieselben Daten |
Vorlage | Ein Objekt gibt eine Struktur vor, nimmt aber steckbare Komponenten auf |
Gast | Rufen Sie einen Rückruf für alle Elemente einer Sammlung auf |
Design für Testbarkeitsmuster :
Muster | Beschreibung |
---|---|
dependency_injection | 3 Varianten der Abhängigkeitsinjektion |
Grundlegende Muster :
Muster | Beschreibung |
---|---|
Delegationsmuster | Ein Objekt bearbeitet eine Anfrage, indem es an ein zweites Objekt (den Delegaten) delegiert. |
Andere :
Muster | Beschreibung |
---|---|
Tafel | Architekturmodell, Zusammenstellung verschiedener Subsystemkenntnisse, um eine Lösung zu erstellen, KI-Ansatz – Nicht-Gang-of-Four-Muster |
graph_search | Grafikalgorithmen – Nicht-Gang-of-Four-Muster |
hsm | Hierarchischer Zustandsautomat – Nicht-Gang-of-Four-Muster |
Designmuster in Python von Peter Ullrich
Sebastian Buczyński – Warum braucht man in Python keine Designmuster?
Das brauchen Sie nicht!
Steckbare Bibliotheken durch Designmuster
Wenn eine Implementierung hinzugefügt oder geändert wird, lesen Sie bitte die folgenden Richtlinien:
Fügen Sie eine Beschreibung auf Modulebene in Form einer Dokumentzeichenfolge mit Links zu entsprechenden Referenzen oder anderen nützlichen Informationen hinzu.
Fügen Sie den Abschnitt „Beispiele im Python-Ökosystem“ hinzu, wenn Sie einige kennen. Es zeigt, wie Muster auf reale Probleme angewendet werden können.
„fassade.py“ bietet ein gutes Beispiel für eine detaillierte Beschreibung, aber manchmal reicht auch die kürzere Beschreibung wie „template.py“ aus.
Um Python 2-kompatible Versionen einiger Muster zu sehen, schauen Sie sich bitte das Legacy-Tag an.
Wenn alles andere erledigt ist, aktualisieren Sie den entsprechenden Teil der README-Datei.
Bitte führen Sie Folgendes aus, bevor Sie einen Patch einreichen
black .
Dies beeinträchtigt Ihren Code.Dann entweder:
tox
oder tox -e ci37
Dadurch werden Unit-Tests ausgeführt. Weitere Details finden Sie in tox.ini../lint.sh
Dieses Skript wird Ihren Code linten und testen. Dieses Skript spiegelt die CI-Pipeline-Aktionen wider. Sie können flake8
oder pytest
-Befehle auch manuell ausführen. Beispiele finden Sie in tox.ini
.
Sie können Probleme selektieren und Anfragen stellen, was das Reproduzieren von Fehlerberichten oder das Anfordern wichtiger Informationen wie Versionsnummern oder Reproduktionsanweisungen umfassen kann. Wenn Sie mit der Triage von Problemen beginnen möchten, besteht eine einfache Möglichkeit darin, Python-Patterns auf CodeTriage zu abonnieren.
Die Leute von Mutable.ai haben einen KI-Assistenten entwickelt, der Codebasis unterstützt. Probieren Sie es aus