Pola metode templat dari pola desain Java mendefinisikan kerangka algoritma operasi dan mengalihkan beberapa langkah ke subkelas, sehingga subkelas dapat mendefinisikan ulang langkah-langkah spesifik tertentu dalam algoritma tanpa mengubah struktur algoritma. Model perilaku
Seperti yang ditunjukkan di bawah ini:
Faktanya, metode template adalah pola yang sering digunakan dalam pemrograman. Mari kita lihat contohnya terlebih dahulu. Suatu hari, programmer A mendapat tugas: diberi array bilangan bulat, mengurutkan angka-angka dalam array dari kecil ke besar, lalu mencetak hasil yang diurutkan. Setelah dianalisis, tugas ini secara kasar dapat dibagi menjadi dua bagian, penyortiran dan pencetakan. Fungsi pencetakan mudah diterapkan, tetapi penyortiran agak merepotkan. Namun A mempunyai cara untuk menyelesaikan fungsi pencetakan terlebih dahulu dan mencari orang lain untuk melakukan fungsi penyortiran.
kelas abstrak AbstrakSort { /** * Mengurutkan array dari kecil ke besar * @param array */ protected abstract void sort(int[] array); public void showSortResult(int[] array){ this.sort(array); System.out.print("Hasil pengurutan: "); for (int i = 0; i < array.length; i++){ System.out.printf("%3s", array[i]);
Setelah selesai menulis, A menemui rekannya B yang baru saja lulus dan bergabung dengan pekerjaan tersebut dan berkata: Ada tugas yang sudah saya tuliskan logika utamanya. Jadi saya memberikan kelas abstractSort ke B dan meminta B untuk menulis implementasinya. B mengambil alih dan melihatnya. Itu terlalu sederhana. Itu bisa dilakukan dalam 10 menit.
class ConcreteSort extends abstractSort { @Override dilindungi void sort(int[] array){ for(int i=0; i<array.length-1; i++){ selectSort(array, i); ] array, int indeks) { int MinValue = 32767; // Variabel nilai minimum int indeksMin = 0; // Variabel indeks nilai minimum int Temp; indeks; i < array.length; i++) { if (array[i] < MinValue){ // Cari nilai minimum MinValue = array[i]; // Simpan nilai minimum indexMin = i; indeks] ; // Pertukaran dua nilai array[index] = array[indexMin];
Setelah menulisnya, serahkan ke A, dan A akan menjalankannya:
Klien kelas publik { public static int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 }; // Array data default public static void main(String[] args){ abstractSort s = new ConcreteSort(); s.showSortHasil(a);
Hasil berjalan:
Hasil penyortiran: 0 1 3 4 5 7 9 10 12 32
Ini berfungsi dengan baik. Oke, misi tercapai. Ya, ini adalah pola metode template. Kebanyakan lulusan yang baru memasuki dunia kerja pasti mempunyai pengalaman serupa dengan B. Untuk tugas yang kompleks, orang-orang terbaik di perusahaan akan menulis logika utama, dan kemudian menulis metode yang tampaknya sederhana menjadi abstrak, dan menyerahkannya kepada rekan lain untuk dikembangkan. Pembagian kerja ini sering digunakan di perusahaan dengan tingkat staf pemrograman yang jelas. Misalnya, jika tim proyek memiliki seorang arsitek, insinyur senior, dan insinyur junior, arsitek umumnya akan menggunakan sejumlah besar antarmuka dan kelas abstrak untuk merangkai logika keseluruhan sistem, dan pengkodean implementasi akan diserahkan kepada insinyur senior dan insinyur junior masing-masing sesuai dengan kesulitannya. Bagaimana, pernahkah Anda menggunakan pola metode template?
Struktur pola metode template:
Pola metode template terdiri dari kelas abstrak dan satu (atau sekelompok) kelas implementasi melalui struktur pewarisan. Metode dalam kelas abstrak dibagi menjadi tiga jenis:
1. Metode abstrak : Hanya dideklarasikan di kelas induk tetapi tidak diimplementasikan. Sebaliknya, spesifikasi ditentukan dan kemudian diimplementasikan oleh subkelasnya.
2. Metode templat : dideklarasikan dan diimplementasikan oleh kelas abstrak. Secara umum, metode templat memanggil metode abstrak untuk menyelesaikan fungsi logika utama, dan sebagian besar metode templat didefinisikan sebagai tipe akhir, yang menunjukkan bahwa fungsi logika utama tidak dapat ditimpa di subkelas.
3. Metode hook : dideklarasikan dan diimplementasikan oleh kelas abstrak. Namun subkelas dapat diperluas, dan subkelas dapat memengaruhi logika metode templat dengan memperluas metode kait.
Tugas kelas abstrak adalah membangun kerangka logis, yang biasanya ditulis oleh personel berpengalaman, karena kualitas kelas abstrak secara langsung menentukan kestabilan program.
Kelas implementasi digunakan untuk mengimplementasikan detail. Metode templat di kelas abstrak melengkapi logika bisnis dengan menerapkan metode ekstensi kelas. Selama metode ekstensi di kelas implementasi lulus pengujian unit dan metode templat benar, umumnya tidak akan ada kesalahan besar dalam keseluruhan fungsi.
Keuntungan dan skenario yang berlaku dari metode templat:
Mudah untuk diperluas. Secara umum metode template pada kelas abstrak merupakan bagian yang tidak mudah diubah secara surut, sedangkan metode abstrak merupakan bagian yang mudah diubah secara surut. Oleh karena itu, dengan menambahkan kelas implementasi, umumnya mudah untuk memperluas fungsinya , yang sejalan dengan prinsip pembukaan dan penutupan.
Mudah dirawat. Untuk pola metode template, justru karena logika utamanya sama maka metode template yang digunakan. Jika metode template tidak digunakan, kode yang sama diperbolehkan tersebar di kelas yang berbeda, sehingga sangat merepotkan untuk dipelihara. .
Lebih fleksibel. Karena metode hook, implementasi subkelas juga dapat mempengaruhi pengoperasian logika utama di kelas induk. Namun, meskipun fleksibel, karena subkelas mempengaruhi kelas induk, hal ini melanggar prinsip substitusi Liskov dan juga membawa risiko pada program. Hal ini menempatkan persyaratan yang lebih tinggi pada desain kelas abstrak.
Jika beberapa subkelas memiliki metode yang sama dan logika metode ini sama, Anda dapat mempertimbangkan untuk menggunakan pola metode templat. Mode ini juga lebih cocok untuk situasi dimana kerangka utama programnya sama tetapi detailnya berbeda.