Template-Method-Muster
Teil des Abschnitts Object Oriented Programming der Python-Journey von Coddy — Lektion 52 von 64.
Das Template-Method-Pattern definiert das Skelett eines Algorithmus in einer Basisklasse und ermöglicht es Unterklassen, bestimmte Schritte zu überschreiben, ohne die Struktur des Algorithmus zu ändern.
Hier ist eine Basisklasse mit einer Template-Methode:
class DataProcessor:
def process(self):
"""Template method defining the algorithm structure"""
self.read_data()
self.process_data()
self.save_data()
def read_data(self):
print("Reading data...")
def process_data(self):
raise NotImplementedError("Subclasses must implement this")
def save_data(self):
print("Saving data...")Die Template-Methode process() definiert die Algorithmusschritte, während process_data() den Unterklassen zur Implementierung überlassen bleibt.
Erstellen Sie konkrete Klassen, die die abstrakte Methode implementieren:
class CSVProcessor(DataProcessor):
def process_data(self):
print("Processing CSV data")
class JSONProcessor(DataProcessor):
def process_data(self):
print("Processing JSON data")Jede konkrete Klasse stellt ihre eigene Implementierung des erforderlichen Schritts bereit.
Verwenden Sie die Template-Methode:
csv_processor = CSVProcessor()
csv_processor.process()
print() # Leerzeile
json_processor = JSONProcessor()
json_processor.process()Erstellen Sie ein weiteres Beispiel mit einer Spielvorlage:
class Game:
def play(self):
"""Template-Methode zum Spielen eines Spiels"""
self.start_game()
self.play_game()
self.end_game()
def start_game(self):
print("Game started!")
def play_game(self):
raise NotImplementedError("Define the game rules")
def end_game(self):
print("Game ended!")
class Chess(Game):
def play_game(self):
print("Playing chess - thinking strategically...")
class Soccer(Game):
def play_game(self):
print("Playing soccer - running and kicking...")
chess = Chess()
chess.play()Ausgabe:
Reading data...
Processing CSV data
Saving data...
Reading data...
Processing JSON data
Saving data...
Game started!
Playing chess - thinking strategically...
Game ended!Kernpunkt: Das Template Method Pattern definiert eine gemeinsame Algorithmusstruktur in der Basisklasse, während Unterklassen spezifische Schritte anpassen können. Die Basisklasse steuert den gesamten Ablauf, aber die Unterklassen liefern die spezifischen Implementierungen. Dies gewährleistet eine konsistente Struktur und ermöglicht gleichzeitig Flexibilität bei den einzelnen Schritten.
Aufgabe
MittelImplementieren Sie die template.py und driver.py mit ordnungsgemäßer Kapselung und Methoden. Folgen Sie den TODO-Kommentaren für eine schrittweise Anleitung.
Spickzettel
Das Template Method Pattern definiert das Skelett eines Algorithmus in einer Basisklasse und ermöglicht es Unterklassen, bestimmte Schritte zu überschreiben, ohne die Struktur des Algorithmus zu ändern.
Erstellen Sie eine Basisklasse mit einer Template-Methode:
class DataProcessor:
def process(self):
"""Template-Methode, die die Algorithmusstruktur definiert"""
self.read_data()
self.process_data()
self.save_data()
def read_data(self):
print("Reading data...")
def process_data(self):
raise NotImplementedError("Subclasses must implement this")
def save_data(self):
print("Saving data...")Erstellen Sie konkrete Klassen, die die abstrakte Methode implementieren:
class CSVProcessor(DataProcessor):
def process_data(self):
print("Processing CSV data")
class JSONProcessor(DataProcessor):
def process_data(self):
print("Processing JSON data")Verwenden Sie die Template-Methode:
csv_processor = CSVProcessor()
csv_processor.process()
json_processor = JSONProcessor()
json_processor.process()Das Template Method Pattern definiert eine gemeinsame Algorithmusstruktur in der Elternklasse, während Unterklassen spezifische Schritte anpassen können. Die Elternklasse steuert den Gesamtablauf, aber die Unterklassen liefern die spezifischen Implementierungen.
Probier es selbst
from template import Template
# Testfall-Handler
test_case = input()
if test_case == "basic_test":
# TODO: Erstelle ein Template-Objekt mit dem Namen "Test Name"
# TODO: Rufe die display_info() Methode für das Objekt auf
pass
elif test_case == "validation_test":
# TODO: Erstelle ein Template-Objekt mit dem Namen "Validation Test"
# TODO: Gib den Namen unter Verwendung der name-Eigenschaft im Format "Name: {obj.name}" aus
passDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Object Oriented Programming
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDer self-ParameterMethodenAttributeKonstruktor-Methode (__init__)Zusammenfassung – Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDie super()-FunktionMethoden überschreibenMehrfachvererbungMethod Resolution OrderZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden
Einführung in Magic MethodsOperator-ÜberladungMagic Methods für ContainerRückblick - Eigene Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster13Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung2Dekoratoren
Einführung in DekoratorenProperty-DekoratorStatischer Methoden-DekoratorKlassenmethoden-Dekorator5Polymorphismus
Methoden-Überschreiben vertieftDuck TypingAbstrakte Klassen und MethodenInterface-DesignZusammenfassung – Formen-Rechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungMixinsStatische und KlassenmethodenKlassendekoratorenContext Manager11Entwurfsmuster Teil 2
Command-MusterAdapter-MusterDecorator-MusterTemplate-Method-MusterZustandsmusterKompositum-Muster3Klasseneigenschaften
Instanz- vs. KlassenvariablenProperty-DekoratorenPrivate AttributeZusammenfassung – Bankkonto-Manager6Kapselung
Public, Protected, Private MemberZugriffsmodifikatorenInformation HidingProperty-Decorators für FortgeschritteneZusammenfassung - Studentenverwaltungssystem12Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen