Menu
Coddy logo textTech

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.

challenge icon

Aufgabe

Mittel

Implementieren 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
    pass
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Object Oriented Programming