Şablon Metot Kalıbı
Coddy'nin Python Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 52 / 64.
Şablon Yöntemi Deseni, bir algoritmanın iskeletini temel sınıfta tanımlar ve alt sınıfların algoritmanın yapısını değiştirmeden belirli adımları geçersiz kılmasına olanak tanır.
İşte bir şablon yöntemi içeren temel sınıf:
class DataProcessor:
def process(self):
"""Algoritma yapısını tanımlayan şablon metot"""
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...")Şablon yöntemi process() algoritma adımlarını tanımlarken process_data() alt sınıfların uygulaması için bırakılır.
Soyut yöntemi uygulayan somut sınıflar oluşturun:
class CSVProcessor(DataProcessor):
def process_data(self):
print("Processing CSV data")
class JSONProcessor(DataProcessor):
def process_data(self):
print("Processing JSON data")Her somut sınıf, gerekli adımın kendi uygulamasını sağlar.
Şablon yöntemini kullanın:
csv_processor = CSVProcessor()
csv_processor.process()
print() # Boş satır
json_processor = JSONProcessor()
json_processor.process()Oyun şablonuyla başka bir örnek oluştur:
class Game:
def play(self):
"""Bir oyunu oynamak için şablon metodu"""
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()Çıktı:
Reading data...
Processing CSV data
Saving data...
Reading data...
Processing JSON data
Saving data...
Game started!
Playing chess - thinking strategically...
Game ended!Temel Nokta: Şablon Yöntem Deseni, alt sınıfların belirli adımları özelleştirmesine olanak tanırken üst sınıfta ortak bir algoritma yapısı tanımlar. Üst sınıf genel akışı kontrol eder, ancak alt sınıflar belirli uygulamaları sağlar. Bu, tek tek adımlarda esnekliğe izin verirken tutarlı bir yapı sağlar.
Görev
OrtaTemplate Method desenini template.py içinde uygulayın. Soyut Report sınıfı, her zaman aynı üç adımı aynı sırayla çalıştıran şablon metoduna generate() sahiptir: header(), body(), footer().
header()her rapor tarafından paylaşılır ve=== Report ===yazdırır.body()soyuttur: her alt sınıf kendi içeriğini yazdırır.footer(), varsayılan olarak=== End ===değerine sahip bir kancadır; bir alt sınıf bunu geçersiz kılabilir.
Ardından iki somut raporu yazın:
SalesReport(total), toplamıself._totaliçinde saklar ve gövdesindeTotal sales: {total}yazdırır.InventoryReport(items), listeyiself._itemsiçinde saklar, gövdesinde her öğe içinItem: {item}yazdırır ve alt bilgiyi=== {count} items ===yazdıracak şekilde geçersiz kılar.
driver.py kilitlidir: raporları oluşturur ve üzerlerinde generate() metodunu çağırır. Alt sınıflar arasında yalnızca adımlar farklıdır; adımların sırası temel sınıfta bir kez tanımlanmıştır.
Kendin dene
from template import SalesReport, InventoryReport
# Test case işleyicisi (değiştirmeyin)
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()
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerself ParametresiMetotlarÖzniteliklerYapıcı Metot (__init__)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımsuper() FonksiyonuMetot Geçersiz KılmaÇoklu KalıtımMetot Çözümleme SırasıÖzet - Çalışan Hiyerarşisi7Özel Metotlar
Sihirli Metotlara GirişOperatör Aşırı YüklemeKapsayıcı Sihirli MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım kalıplarına girişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı13Final Meydan Okumaları
E-öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi5Çok Biçimlilik (Polymorphism)
Metot Geçersiz Kılmaya Yeniden BakışDuck TypingSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon ve KalıtımMixinsStatik ve Sınıf MetotlarıSınıf DekoratörleriBağlam Yöneticileri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıKendi başına pratik yap: Online Python derleyicisi