7
Contoh Template Method Minuman.java package templatemethod; /** * * @author eja */ public abstract class Minuman { public abstract void olahMinuman(); public abstract void tambahPelengkap(); public void rebusAir(){ System.out.println("Merebus Air"); } public void tuangKeCup(){ System.out.println("Menuang Minuman dalam Cup"); } public final void preparedRecipe(){ rebusAir(); olahMinuman(); tuangKeCup(); tambahPelengkap(); } } Perhatikan pada super class terdapat method abstract. Method abstract tersebut harus di-override oleh sub-class. Terdapat template method yang memiliki keyword “final”, yang mengakibatkan method ini tidak boleh di-override oleh sub-class. Method ini memanggil 3 tipe method lainnya.

Contoh Template Method Pattern

Embed Size (px)

DESCRIPTION

Pemrograma berorientasi object lanjut

Citation preview

Page 1: Contoh Template Method Pattern

Contoh Template MethodMinuman.java

package templatemethod;

/** * * @author eja */public abstract class Minuman { public abstract void olahMinuman(); public abstract void tambahPelengkap(); public void rebusAir(){ System.out.println("Merebus Air"); } public void tuangKeCup(){ System.out.println("Menuang Minuman dalam Cup"); } public final void preparedRecipe(){ rebusAir(); olahMinuman(); tuangKeCup(); tambahPelengkap(); }}

Perhatikan pada super class terdapat method abstract. Method abstract tersebut harus di-override olehsub-class. Terdapat template method yang memiliki keyword “final”, yang mengakibatkan method initidak boleh di-override oleh sub-class. Method ini memanggil 3 tipe method lainnya.

Page 2: Contoh Template Method Pattern

Teh.java

package templatemethod;

/** * * @author eja */public class Teh extends Minuman{

@Override public void olahMinuman() { System.out.println("Mencelupkan Daun Teh Dalam Air Mendidih"); }

@Override public void tambahPelengkap() { System.out.println("Menambahkan Lemon"); } }

Kopi.java

package templatemethod;

/** * * @author eja */public class Kopi extends Minuman{

@Override public void olahMinuman() { System.out.println("Merebus Kopi dalam Air"); }

@Override public void tambahPelengkap() { System.out.println("Menambahkan Gula dan Kopi"); } }

Page 3: Contoh Template Method Pattern

Main.java

package templatemethod;

/** * * @author eja */public class Main { public static void main(String[] args) { Minuman k = new Kopi(); k.preparedRecipe(); System.out.println(); Teh t = new Teh(); t.preparedRecipe(); }}

Perhatikan pada Main.java, yang dijalankan adalah template method-nya. Sedangkan template methodmemanggil method yang bersifat abstract. Hal ini berarti terdapat algoritma super-class men-defer(menangguhkan) implementasi algoritma terhadap sub-class nya. Hal ini sesuai dengan definisi daridesign pattern “Template Method”.

Dengan menggunakan template method pattern, maka konsekuensinya, secara tidak langsung telahmenerapkan “Hollywood Principle” dan “Dependency Inversion Principle” (DIP). DIP merupakankondisi dimana ketergantungan antar super dan sub menjadi terbalik (policy-setting ada di super class,dan relationship terjadi pada sub-class). Hal ini dimaksudkan untuk membuat super class tidakbergantung ke level implementasi.

Secara definitif, ditulisin sebagai berikut:

“the dependency inversion principle refers to a specific form of decoupling where conventionaldependency relationships established from high-level, policy-setting modules to low-level,dependency modules are inverted (i.e. reversed) for the purpose of rendering high-levelmodules independent of the low-level module implementation details.”

Terdapat 2 state pada kondisi tersebut:

• High-level modules should not depend on low-level modules. Both should depend onabstractions.

• Abstractions should not depend on details. Details should depend on abstractions.

Hubungan ini mengakibatkan abstract class yang memiliki method abstract sangat bergantung kesub-class untuk menjalankan sebuah logika pemrograman. Dan sub-class bergantung pada super-classuntuk mendapatkan concrete method. Sedangkan “Holywood Principle”, disebutkan sebagai “Don'tcall us, we'll call you!” merupakan konsekuensi lain dari template method. Super-class dari templatemethod mengendalikan proses secara keseluruhan. Class tersebut akan memanggil method darisubclass ketika dibutuhkan. Sehingga terdapat ketergantungan induk ke anak dan juga bergantungkepada induknya.

Page 4: Contoh Template Method Pattern

Template Method dengan Hook Method

Minuman.java

/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */

package templatemethod;

/** * * @author eja */public abstract class Minuman { public abstract void olahMinuman(); public abstract void tambahPelengkap(); public void rebusAir(){ System.out.println("Merebus Air"); } public void tuangKeCup(){ System.out.println("Menuang Minuman dalam Cup"); } public final void preparedRecipe(){ rebusAir(); olahMinuman(); tuangKeCup(); if(tanyaTambahPelengkap()){ tambahPelengkap(); } } public boolean tanyaTambahPelengkap(){ return true; }}

Pada kode di atas, terdapat sebuah method “tanyaTambahPelengkap()”. Method tersebut merupakanconcrete method. Tapi, method tersebut diharapkan untuk di-override oleh sub-class, karena defaultnyahanya mengembalikan nilai true.

Contoh:

Page 5: Contoh Template Method Pattern

Teh.java

package templatemethod;

import java.util.Scanner;

/** * * @author eja */public class Teh extends Minuman{

@Override public void olahMinuman() { System.out.println("Mencelupkan Daun Teh Dalam Air Mendidih"); }

@Override public void tambahPelengkap() { System.out.println("Menambahkan Lemon"); }

@Override public boolean tanyaTambahPelengkap() { Scanner s = new Scanner(System.in); System.out.print("Masukkan Pelengkap? Tekan 1 untuk jawaban \"YA\". Masukan: "); int masukan = s.nextInt(); if(masukan == 1){ return true; }else{ return false; } } }

Page 6: Contoh Template Method Pattern

Kopi.java

/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */package templatemethod;

import java.util.Scanner;

/** * * @author eja */public class Kopi extends Minuman {

@Override public void olahMinuman() { System.out.println("Merebus Kopi dalam Air"); }

@Override public void tambahPelengkap() { System.out.println("Menambahkan Gula dan Kopi"); }

@Override public boolean tanyaTambahPelengkap() { Scanner s = new Scanner(System.in); System.out.print("Masukkan Pelengkap? Tekan y untuk jawaban \"YA\". Masukan: "); String masukan = s.next(); if (masukan.equalsIgnoreCase("y")) { return true; } else { return false; } }

}

Page 7: Contoh Template Method Pattern

Output: