Persamaan dan perbedaan antara keduanya:
Metode Templat
- Bergantung pada warisan.
- Menentukan langkah-langkah suatu algoritma, dan meninggalkan tugas mengimplementasikannya ke subclass.
Metode Pabrik
- Bergantung pada warisan.
- Superclass mendefinisikan antarmuka untuk membuat objek. Subkelas memutuskan kelas konkret mana yang akan dipakai.
Dua berdampingan:
Saya tidak yakin apa arti frasa "Metode Pabrik adalah spesialisasi Metode Templat" (ada di buku Pola Desain Kepala Pertama ). Di Beverage
kami memiliki metode prepare
yang final
dan mendefinisikan serangkaian langkah-langkah. Dalam PizzaStore
kita memiliki metode yang abstract
, dan subkelas mendefinisikannya kembali. Bagaimana yang terakhir merupakan spesialisasi dari yang pertama?
design-patterns
object-oriented-design
factory-method
template-method
Maria Ines Parnisari
sumber
sumber
Jawaban:
Dalam
Beverage
kita memiliki metode ("template")prepare
yang memanggil beberapa metode abstrak sepertiboilWater
,brew
dll. Yang diimplementasikan dalam subkelas Ini pada dasarnya bukan untuk pola untuk memiliki metode templat yang terletak di kelas dasar, bisa saja di tempat lain, asumsikan metode abstrak bersifat publik. Tetapi pada dasarnya ada metode abstrak yang harus diganti dan akan mengisi celah dalam "templat algoritma".Metode pabrik juga tentang kelas di mana metode abstrak ditimpa, titik inti adalah penelepon metode itu tidak perlu tahu jenis yang tepat dari objek yang dibuat. Perhatikan bahwa dalam
PizzaStore
, metode abstrakcreatePizza
harus dipanggil dari suatu tempat - katakanlah sebuah metodecreateLotsOfPizza
.Ini menjadikan yang terakhir metode templat, di mana langkah-langkah spesifik dari "algoritma untuk membuat pizza" adalah celah yang harus diisi. Sekarang mungkin hanya penggunaan kata-kata yang tidak tepat dengan mengatakan "pola metode pabrik" adalah kasus khusus dari pola "metode templat". Terutama "metode pabrik" bukan "metode templat", namun mereka mungkin dipanggil dari metode templat. Jadi lebih tepatnya, bisa kita katakan
dan saya kira itulah yang ingin diungkapkan oleh penulis buku itu.
sumber
Saya pikir "Metode Pabrik adalah spesialisasi Metode Templat" adalah kesalahan karakterisasi. Saya percaya bahwa akan lebih akurat untuk mengatakan bahwa pola Metode Template hanyalah variasi pada pola Metode Pabrik.
Lebih lanjut, saya mengklaim bahwa pola Metode Templat sama sekali bukan pola sama sekali (dalam pengertian Gang of Four), karena pola tersebut muncul secara alami melalui pewarisan dan penimpaan metode. Anda dapat melihat bahwa, dalam diagram di atas untuk Pola Templat, kelas turunan hanya menimpa metode di kelas dasar dengan perilaku mereka sendiri.
Secara keseluruhan, Pola Perangkat Lunak (dari variasi Geng Empat) benar-benar hanya solusi untuk kekurangan dalam bahasa pemrograman, dan Pola Template hanya menyatakan kembali apa yang sudah mampu dilakukan oleh bahasa berorientasi objek.
sumber
Saya akan mengatakan Kepala Pertama benar-benar salah dalam karakterisasi ini.
Wikipedia mendefinisikan Metode Templat sebagai:
(Ini referensi GoF untuk itu.)
Dan Metode Pabrik didefinisikan sebagai:
Tidak ada tumpang tindih antara keduanya, kecuali bahwa dalam C ++, warisan adalah bagian kunci dari keduanya. Namun, dalam bahasa yang membuat perbedaan antara warisan implementasi (
extends
di Jawa) dan implementasi antarmuka (implements
di Jawa), bahkan kesamaan ini tidak ada, karena implementasi antarmuka cukup untuk metode pabrik, tetapi bukan metode templat. Dan di C ++, warisan implementasi murni (tanpa warisan antarmuka, yaitu warisan pribadi atau CRTP) dapat digunakan untuk yang pertama, tetapi tidak untuk yang terakhir.Dan selain itu? Salah satunya adalah pola desain perilaku, yang lain adalah pola penciptaan. Satu menggambarkan garis besar operasi, dengan beberapa bagian penting ditinggalkan untuk diisi oleh subclass khusus; yang lain menentukan kontrak yang sangat sederhana, meninggalkan seluruh implementasi pada contoh nyata. Mereka sangat berbeda.
Menurut pendapat saya, kalimat yang dikutip itu salah. Entah itu kesalahan mencolok dalam buku ini, atau (kecil kemungkinannya) di luar konteks dan harus ditafsirkan secara berbeda.
sumber