Pembaca seperti Anda membantu mendukung MUO. Saat Anda melakukan pembelian menggunakan tautan di situs kami, kami dapat memperoleh komisi afiliasi.

Pola desain metode templat memungkinkan Anda menentukan langkah-langkah algoritme dalam satu metode kelas. Ini memungkinkan Anda untuk membatasi operasi tertentu dari suatu aplikasi ke satu metode.

Setiap langkah dari algoritma yang didefinisikan oleh metode template adalah metode dalam. Namun, metode template hanya menangani penerapan beberapa metode dalamnya. Subkelas biasanya mengimplementasikan satu atau lebih metode dalam metode templat.

Subclass dapat mengimplementasikan metode abstrak, tetapi tidak dapat mendefinisikan ulang algoritme yang diimplementasikan oleh metode akhir.

Cara Kerja Metode Template

Pola metode templat tipikal akan memiliki struktur berikut:

terakhirruang kosongtemplateMethod(){
abstractOperation1();
abstractOperation2();

operasi beton1();
operasi beton2();

kait();
}

Hal penting pertama yang harus diperhatikan adalah bahwa templateMethod() bersifat final, sehingga tidak ada subkelas yang dapat menggantikan metode ini. Hal penting lainnya yang perlu diperhatikan adalah tiga jenis metode yang digunakan pola metode templat: beton, abstrak, dan pengait.

instagram viewer

Kelas abstrak yang menampung metode template mengimplementasikan semua metode konkretnya, sementara subkelas konkret mengimplementasikan metode abstraknya. Metode hook biasanya tidak melakukan apa-apa secara default, tetapi subkelas memiliki kemampuan untuk mengganti metode ini bila diperlukan.

Menerapkan Pola Metode Templat di Java

Pola metode templat bertindak sebagai kerangka kerja untuk aplikasi. Jadi, Anda akan sering melihat pola ini dalam kerangka perangkat lunak yang menyediakan cetak biru untuk pengembangan aplikasi.

Misalnya, Anda dapat menghubungkan aplikasi Anda ke salah satu dari banyak sistem database. Langkah-langkah untuk terhubung ke dan menggunakan database mengikuti template serupa:

publikabstrakkelasBasis data{
// metode templat
terakhirruang kosongdatabaseTemplate(){
// metode abstrak
setDBDriver();
setCredentials();

// metode konkret
Menghubung();

// metode abstrak
createDB();
setData();
bacaData();

// metode pengait
if (userWantsToUpdate()) {
perbaharui data();
}

jika (penggunaWantsToDelete()) {
hapusData();
}

// metode konkret
closeConnection();
}

abstrakruang kosongsetDBDriver();
abstrakruang kosongsetCredentials();
abstrakruang kosongcreateDB();
abstrakruang kosongsetData();
abstrakruang kosongreadData();
abstrakruang kosongperbaharui data();
abstrakruang kosonghapus Data();

ruang kosongMenghubung(){
Sistem.keluar.println("Menghubungkan ke basis data...");
}

ruang kosongkoneksi dekat(){
Sistem.keluar.println("Menghancurkan koneksi basis data...");
}

booleanuserWantsToUpdate(){
kembaliPALSU;
}

booleanuserWantsToDelete(){
kembaliPALSU;
}
}

Contoh kelas Database ini menggunakan pola metode template untuk membuat template yang dapat Anda gunakan dengan database apa pun. Untuk menggunakan database, aplikasi Anda harus terhubung ke database tersebut, lalu hancurkan koneksi setelah digunakan. Kegiatan ini biasanya sama untuk semua database. Oleh karena itu, kelas Database abstrak dapat mengimplementasikan Menghubung() Dan closeConnection() metode.

Metode lain dalam metode template akan berbeda berdasarkan jenis database. Misalnya, database MySQL menyimpan data dalam tabel, sedangkan a Database MongoDB menyimpan data dalam koleksi. Jika Anda ingin menggunakan Database MySQL di Jawa, cukup buat kelas MySQL baru yang memperluas kelas Database:

publikkelasMySQLmemanjangBasis data{
@Mengesampingkan
ruang kosongsetDBDriver(){
Sistem.keluar.println("Memilih driver MySQL...");
}

@Mengesampingkan
ruang kosongsetCredentials(){
Sistem.keluar.println("Menyetel Kredensial basis data MySQL...");
}

@Mengesampingkan
ruang kosongcreateDB(){
Sistem.keluar.println("Membuat tabel baru...");
}

@Mengesampingkan
ruang kosongsetData(){
Sistem.keluar.println("Memasukkan data ke database...");
}

@Mengesampingkan
ruang kosongreadData(){
Sistem.keluar.println("Mengambil data dari basis data...");
}

@Mengesampingkan
ruang kosongperbaharui data(){
Sistem.keluar.println("Mengupdate data di database...");
}

@Mengesampingkan
ruang kosonghapus Data(){
Sistem.keluar.println("Menghapus data dari database...");
}
}

Kelas MySQL mengimplementasikan semua metode abstrak dari kelas Database. Itu juga dapat mengesampingkan beberapa metode konkret. Namun, itu tidak bisa menyentuh databaseTemplate() metode, yang menggunakan kata kunci final.

publikkelasUtama{
publikstatisruang kosongutama(String[] argumen){
Basis data mySQLDB = baru MySQL();
mySQLDB.databaseTemplate();
}
}

Kelas Utama ini membuat objek database MySQL baru dan menggunakan metode template untuk mensimulasikan bagaimana aplikasi akan terhubung ke database. Menjalankan metode utama mencetak keluaran berikut ke konsol:

Pada output, Anda akan melihat bahwa aplikasi tidak pernah memanggil perbaharui data() Dan hapusData() metode. Inilah mengapa metode kail itu penting. Dalam database SQL, Anda ingin membuat tabel baru, menyisipkan data, dan menampilkan data Anda. Namun, Anda mungkin tidak ingin memperbarui atau menghapus data. Oleh karena itu, metode hook memberikan opsi kepada subclass untuk mengontrol aspek-aspek penting dari algoritme ini.

@Mengesampingkan
booleanuserWantsToUpdate(){
kembaliBENAR;
}

Dengan hanya menambahkan kode di atas ke kelas MySQL, aplikasi sekarang memperbarui data di database. Jika Anda menjalankan kelas Utama lagi, output yang diperbarui akan ditampilkan sebagai berikut:

Seperti yang Anda lihat, aplikasi sekarang memperbarui data di Database.

Manfaat Menggunakan Template Method Design Pattern

Manfaat utama dari pola metode template adalah mempromosikan perangkat lunak yang dapat digunakan kembali. Pola desain ini juga mendukung pemrograman yang efisien. Subclass hanya perlu mengimplementasikan metode yang unik untuk operasinya.

Selain itu, aplikasi yang menggunakan pola metode templat lebih aman, karena kelas eksternal tidak dapat mengubah struktur operasinya.