Menu
Coddy logo textTech

Ş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.

challenge icon

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, final adlı bir generateDocument() metot: createHeader(), createBody() ve createFooter().

    Alt sınıfların uygulaması gereken iki soyut metot: createHeader() ve createBody().

    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() metodu Report 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ıra Customer: [name], sonraki satıra ise Amount Due: $[amount] yazdırır (tutarı iki ondalık basamağa biçimlendir).

    createFooter() metodunu geçersiz kılarak Thank 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 ReportGenerator oluştur ve generateDocument() metodunu çağır. Ayırmak için boş bir satır yazdır. Ardından müşteri adı ve tutarla birlikte bir InvoiceGenerator oluştur ve generateDocument() 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
        
    }
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online Java derleyicisi