Menu
CoddyTech

Pola Template Method

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Python di Coddy. Pelajaran 52 dari 64.

Pola Template Method mendefinisikan kerangka algoritma di dalam class dasar, sehingga subclass dapat mengganti langkah-langkah tertentu tanpa mengubah struktur algoritma.

Berikut adalah base class dengan template method:

class DataProcessor:
    def process(self):
        """method template yang menentukan struktur algoritma"""
        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...")

method template process() menentukan langkah-langkah algoritma, sedangkan process_data() diserahkan kepada subclass untuk diimplementasikan.

Buat class konkret yang mengimplementasikan method abstrak:

class CSVProcessor(DataProcessor):
    def process_data(self):
        print("Processing CSV data")

class JSONProcessor(DataProcessor):
    def process_data(self):
        print("Processing JSON data")

Setiap class konkret menyediakan implementasinya sendiri untuk langkah yang diwajibkan.

Gunakan template method:

csv_processor = CSVProcessor()
csv_processor.process()

print()  # Baris kosong

json_processor = JSONProcessor()
json_processor.process()

Buat contoh lain dengan template game:

class Game:
    def play(self):
        """Template method untuk memainkan permainan"""
        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()

Keluaran:

Reading data...
Processing CSV data
Saving data...

Reading data...
Processing JSON data
Saving data...
Game started!
Playing chess - thinking strategically...
Game ended!

Poin Utama: Pola Template Method mendefinisikan struktur algoritma umum di class induk sekaligus memungkinkan subclass menyesuaikan langkah-langkah tertentu. Class induk mengendalikan alur keseluruhan, tetapi subclass menyediakan implementasi spesifik. Hal ini memastikan struktur yang konsisten sekaligus memberikan fleksibilitas pada setiap langkah.

challenge icon

Tantangan

Sedang

Implementasikan pola Template Method di template.py. Class abstrak Report memiliki method template generate(), yang selalu menjalankan tiga langkah yang sama dalam urutan yang sama: header(), body(), footer().

  • header() digunakan bersama oleh setiap laporan dan mencetak === Report ===.
  • body() bersifat abstrak: setiap subclass mencetak kontennya sendiri.
  • footer() adalah hook dengan nilai default, === End ===, yang dapat ditimpa oleh subclass.

Lalu, tulis dua laporan konkret:

  • SalesReport(total) menyimpan total di self._total dan mencetak Total sales: {total} di bagian body.
  • InventoryReport(items) menyimpan list di self._items, mencetak Item: {item} untuk setiap item di bagian body, dan menimpa footer untuk mencetak === {count} items ===.

driver.py dikunci: file ini membuat laporan dan memanggil generate() pada laporan tersebut. Hanya langkah-langkahnya yang berbeda di antara subclass, sedangkan urutan langkah-langkah tersebut ditetapkan satu kali di class dasar.

Coba sendiri

from template import SalesReport, InventoryReport

# Penangan kasus uji (jangan diubah)
test_case = input()

if test_case == "sales_test":
    SalesReport(1500).generate()
elif test_case == "inventory_test":
    InventoryReport(["Laptop", "Mouse"]).generate()
elif test_case == "both_test":
    for report in [SalesReport(200), InventoryReport(["Pen"])]:
        report.generate()
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Python online