Şablon Metot Kalıbı
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 73 / 87.
Şablon Yöntemi Kalıbı, bir algoritmanın iskeletini temel sınıfta tanımlayan ve alt sınıfların genel yapıyı değiştirmeden belirli adımları geçersiz kılmasına olanak tanıyan davranışsal bir tasarım kalıbıdır. Bunu bir tarif gibi düşünebilirsin: genel pişirme süreci aynı kalır, ancak kullanılan malzemeler veya teknikler değişebilir.
Desen, bir dizi adımı çağıran bir şablon yöntemi içeren soyut bir sınıf kullanır. Bazı adımların varsayılan uygulamaları vardır; diğerleri ise soyuttur ve alt sınıflar tarafından uygulanmalıdır:
abstract class DataProcessor {
// Şablon metot - algoritma yapısını tanımlar
public final void process() {
readData();
processData();
saveData();
}
abstract void readData();
abstract void processData();
// Varsayılan implementasyon (hook metodu)
void saveData() {
System.out.println("Saving to default location");
}
}
class CSVProcessor extends DataProcessor {
void readData() {
System.out.println("Reading CSV file");
}
void processData() {
System.out.println("Parsing CSV data");
}
}
class XMLProcessor extends DataProcessor {
void readData() {
System.out.println("Reading XML file");
}
void processData() {
System.out.println("Parsing XML data");
}
}Şablon metodu, alt sınıfların algoritmanın yapısını değiştirmesini önlemek için genellikle final olarak işaretlenir. Çağrıldığında, tüm alt sınıflar için aynı sırayı yürütür:
DataProcessor csv = new CSVProcessor();
csv.process();
// Çıktı:
// CSV dosyası okunuyor
// CSV verisi ayrıştırılıyor
// Varsayılan konuma kaydediliyorŞablon Yöntem Deseni, aynı yapıyı paylaşan ancak belirli adımlarda farklılık gösteren algoritmalara sahip olduğunuzda idealdir. Ortak mantığı temel sınıfa yerleştirirken kalıtım yoluyla özelleştirmeye izin vererek kodun yeniden kullanılmasını teşvik eder.
Görev
KolayŞablon Metodu Kalıbını kullanarak bir belge oluşturma sistemi geliştirelim! Farklı belge türlerinin (raporlar ve faturalar) aynı oluşturma sürecini izlemesini, ancak belirli adımları özelleştirmesini sağlayan bir çerçeve oluşturacaksın. Bu, genel iş akışının sabit olduğu ancak ayrıntıların belge türüne göre değiştiği senaryolar için idealdir.
Kodunu dört dosyaya ayıracaksın:
DocumentGenerator.java: Şablon metodunu tanımlayan soyut temel sınıfı oluştur.DocumentGeneratorşunlara sahip olmalı:Üç adımı sırayla çağırarak algoritmanın iskeletini tanımlayan,
finaladlı birgenerateDocument()metot:createHeader(),createBody()vecreateFooter().Alt sınıfların uygulaması gereken iki soyut metot:
createHeader()vecreateBody().createFooter()yazdıran varsayılan uygulamaya sahip bir kanca metodu--- End of Document ---.ReportGenerator.java: Rapor oluşturmak için somut bir alt sınıf oluştur. Yapıcısı aracılığıyla bir rapor başlığı (String) almalı.createHeader()metodu=== REPORT: [title] ===yazdırır.createBody()metoduReport content goes here...yazdırır.Miras alınan varsayılan alt bilgiyi kullan.
InvoiceGenerator.java: Fatura oluşturmak için başka bir somut alt sınıf oluştur. Yapıcısı aracılığıyla bir müşteri adı (String) ve bir tutar (double) almalı.createHeader()metodu*** INVOICE ***yazdırır.createBody()metodu bir satıraCustomer: [name], sonraki satıra iseAmount Due: $[amount]yazdırır (tutarı iki ondalık basamağa biçimlendir).createFooter()metodunu geçersiz kılarakThank you for your business!yazdır.Main.java: Şablon metodu sistemini bir araya getir! Üç girdi alacaksın: bir rapor başlığı (String), bir müşteri adı (String) ve bir fatura tutarı (double).Başlıkla birlikte bir
ReportGeneratoroluştur vegenerateDocument()metodunu çağır. Ayırmak için boş bir satır yazdır. Ardından müşteri adı ve tutarla birlikte birInvoiceGeneratoroluştur vegenerateDocument()metodunu çağır.
Üç girdiyi şu sırayla alacaksın: rapor başlığı (String), müşteri adı (String) ve fatura tutarı (double).
Örneğin, girdiler Q4 Sales, Acme Corp ve 1500.00 olduğunda çıktın şöyle olur:
=== REPORT: Q4 Sales ===
Report content goes here...
--- End of Document ---
*** INVOICE ***
Customer: Acme Corp
Amount Due: $1500.00
Thank you for your business!Her iki belge türünün de şablon metodunda tanımlanan aynı üç adımlı süreci izlediğine, ancak adımları farklı şekilde özelleştirdiğine dikkat et. ReportGenerator varsayılan alt bilgiyi kullanırken InvoiceGenerator kendi alt bilgisini sağlar. Şablon Metodu Kalıbındaki kanca metotlarının gücü budur!
Kendin dene
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Girdileri oku
String reportTitle = scanner.nextLine();
String customerName = scanner.nextLine();
double invoiceAmount = scanner.nextDouble();
// TODO: Başlık ile bir ReportGenerator oluştur ve generateDocument() çağır
// TODO: Ayırma için boş bir satır yazdır
// TODO: Müşteri adı ve tutar ile bir InvoiceGenerator oluştur ve generateDocument() çağır
}
}
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 Nesnelerthis Anahtar KelimesiMetotlarAlanlar (Öznitelikler)Yapıcı MetotYapıcı Metot Aşırı YüklemeÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (extends)super Anahtar KelimesiMetot Geçersiz Kılma (@Override)Yapıcı Metot ZincirlemeObject SınıfıTekli ve Çok Seviyeli KalıtımNeden Çoklu Sınıf Kalıtımı Yok?Özet - Çalışan Hiyerarşisi7Özel Metotlar ve Object Sınıfı
toString() Metoduequals() ve hashCode()clone() MetoducompareTo() ve ComparableComparator ArayüzüÖzet - Özel Sıralama2Erişim Belirleyiciler ve Kapsülleme
Erişim Seviyelerine Genel BakışGetter ve Setter MetotlarıBilgi Gizlemefinal Anahtar KelimesiÖzet - Banka Hesabı Yöneticisi5Polimorfizm
Metot Aşırı Yükleme TemelleriMetot Geçersiz Kılma (Çalışma Zamanı)Upcasting ve Downcastinginstanceof OperatörüSoyut Sınıflar ve MetotlarÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımAgregasyon vs KompozisyonDahili, Yuvalanmış ve Anonim SınıflarEnum'lar ve Enum MetotlarıRecords (Java 16+)Sealed Classes (Java 17+)11Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıBuilder KalıbıObserver KalıbıStrategy Kalıbı14Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi3Sınıf Özellikleri ve Statik Üyeler
Instance ve Statik DeğişkenlerStatik MetotlarStatik BloklarSabitler (static final)Özet - Sayaç ve Utility6Arayüzler ve Soyut Sınıflar
Arayüzlere GirişArayüzleri UygulamaÇoklu Arayüz UygulamaArayüzlerde Default ve StaticSoyut Sınıflar ve ArayüzlerFonksiyonel ArayüzlerÖzet - Ödeme Sistemi9Generics
Generics'e GirişGeneric SınıflarGeneric MetotlarSınırlandırılmış Tip ParametreleriWildcard'lar (?, extends, super)Özet - Generic Container12Tasarı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ıYineleyici KalıbıKendi başına pratik yap: Online Java derleyicisi