Genel

Java Tasarım Desenleri : Template Method Pattern | Design Pattern

Template Method Pattern

Template Method Pattern ile ilgili ders anlatımına aşağıdaki adresten ulaşabilirsiniz.

Template Method Pattern, davranışsal bir tasarım desenidir ve bir sürecin temel bir şablonunu tanımlar, ancak bu sürecin bazı adımları alt sınıflara bırakır. Bu desen, bir algoritmayı içeren bir sürecin yapılandırılmasını sağlar, ancak alt sınıfların belirli adımları uygulamalarına izin verir.

Temel Bileşenler

  • Abstract Class (Soyut Sınıf): Bu, temel şablonu içeren ve alt sınıflar tarafından uygulanması gereken metodları tanımlar.
  • Concrete Classes (Somut Sınıflar): Bu, Abstract Class’ı genişleten ve belirli adımları uygulayan alt sınıfları temsil eder.

Temel Kavramlar

  • Template Method (Şablon Metodu): Bu, bir algoritmanın temel şablonunu tanımlar ve bazı adımları alt sınıflara bırakır. Bu metod, genellikle Abstract Class içinde tanımlanır.
  • Hook Method (Kancalı Metod): Bu, alt sınıfların isteğe bağlı olarak uygulayabileceği metodları temsil eder. Bu metodlar, varsayılan bir uygulamaya sahip olabilir veya boş bırakılabilir.

Amaç

Template Method Pattern’in amacı, bir algoritmayı içeren bir sürecin temel bir şablonunu tanımlamak ve alt sınıfların belirli adımları uygulamasına izin vermek. Bu sayede, benzer işlemleri gerçekleştiren ancak belirli adımları farklı olan sınıflar arasında kod tekrarını önler.

Avantajlar

  • Kod Teşhisi: Template Method Pattern, bir algoritmayı daha modüler hale getirerek kodun daha iyi anlaşılmasını sağlar.
  • Kod Tekrarını Önleme: Ortak işlemleri gerçekleştiren ancak belirli adımları farklı olan sınıflar arasında kod tekrarını önler.
  • Esneklik: Alt sınıflar, Abstract Class’ın belirli adımlarını uygulamak veya yeniden tanımlamak suretiyle algoritmanın davranışını değiştirebilirler.

Template Method Pattern, kod tekrarını azaltarak, kodun yeniden kullanılabilirliğini artırır ve algoritmalar arasında esneklik sağlar.

Kod örneği :


public class JsonReport extends ReportTemplate {
    @Override
    String createPathForFile() {
        return "test.json";
    }

    @Override
    void loadData() {
        System.out.println("Json data yüklendi");
    }
}

public class XmlReport extends ReportTemplate {
    @Override
    String createPathForFile() {
        return "test.xml";
    }

    @Override
    void loadData() {
        System.out.println("xml data yüklendi");
    }
}


public abstract class ReportTemplate {

    public void createReport(){
        String path = createPathForFile();
        createFile(path);
        openFile(path);
        loadData();
        closeFile(path);
    }

    abstract String createPathForFile();

    public void createFile(String path){
        System.out.println(path + " isimli dosya oluşturuldu");
    }

    public void openFile(String path){
        System.out.println(path + " isimli dosya açıldı");
    }

    abstract void loadData();

    public void closeFile(String path){
        System.out.println(path + " isimli dosya kapatıldı.");
    }

}

    public static void main(String[] args) {
        ReportTemplate jsonReport=new JsonReport();
        jsonReport.createReport();

        ReportTemplate xmlReport = new XmlReport();
        xmlReport.createReport();
    }

Okuduğunuz için teşekkür ederim.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir