Adakah yang bisa menjelaskan perbedaan antara pola pabrik dan strategi?
Bagi saya keduanya terlihat sama selain kelas pabrik tambahan (yang membuat objek produk dalam pola pabrik)
Adakah yang bisa menjelaskan perbedaan antara pola pabrik dan strategi?
Bagi saya keduanya terlihat sama selain kelas pabrik tambahan (yang membuat objek produk dalam pola pabrik)
Pola pabrik adalah pola penciptaan. Pola strategi adalah pola operasional. Dengan kata lain, pola pabrik digunakan untuk membuat objek dari tipe tertentu. Pola strategi digunakan untuk melakukan operasi (atau serangkaian operasi) dengan cara tertentu. Dalam contoh klasik, pabrik dapat membuat berbagai jenis Hewan: Anjing, Kucing, Harimau, sementara pola strategi akan melakukan tindakan tertentu, misalnya, Pindah; menggunakan strategi Run, Walk, atau Lope.
Bahkan keduanya bisa digunakan bersama. Misalnya, Anda mungkin memiliki pabrik yang menciptakan objek bisnis Anda. Itu mungkin menggunakan strategi yang berbeda berdasarkan pada media kegigihan. Jika data Anda disimpan secara lokal dalam XML, itu akan menggunakan satu strategi. Jika data jauh di database yang berbeda, itu akan menggunakan yang lain.
Pola strategi memungkinkan Anda untuk secara polimorfis mengubah perilaku suatu kelas.
Pola pabrik memungkinkan Anda untuk merangkum pembuatan objek.
Gary membuat poin yang bagus. Jika Anda menggunakan prinsip pengkodean untuk abstraksi daripada "concretions" maka banyak pola mulai tampak seperti variasi pada suatu tema.
sumber
Hanya untuk menambah apa yang dikatakan tvanfosson, banyak pola terlihat sama sejauh implementasi. Yaitu, banyak yang sudah Anda buat antarmuka di mana mungkin tidak ada satu sebelumnya dalam kode Anda, dan kemudian buat banyak implementasi dari antarmuka itu. Perbedaannya adalah dalam tujuan mereka dan bagaimana mereka digunakan.
sumber
Buat hanya contoh nyata. Argumen yang berbeda dapat menghasilkan objek yang berbeda. Itu tergantung pada logika dll.
Enkapsulasi algoritma (langkah-langkah) untuk melakukan suatu tindakan. Jadi Anda bisa mengubah strategi dan menggunakan algoritma lain.
Walaupun keduanya terlihat sangat mirip, tujuannya agak berbeda, satu tujuan adalah untuk menciptakan yang lain adalah untuk melakukan suatu tindakan.
Begitu. Jika metode Pabrik Anda diperbaiki, Anda mungkin memilikinya seperti ini:
Tetapi anggaplah pabrik Anda membutuhkan kreasi yang lebih maju atau dinamis. Anda dapat menambahkan strategi metode pabrik dan mengubahnya tanpa harus mengkompilasi ulang, strategi dapat berubah saat runtime.
sumber
Pertama-tama, perbedaan antara pabrik sederhana dan pabrik abstrak harus dibuat. Yang pertama adalah pabrik sederhana di mana Anda hanya memiliki satu kelas yang bertindak sebagai pabrik untuk pembuatan objek, sedangkan di kelas yang lain Anda terhubung ke antarmuka pabrik (yang mendefinisikan nama metode) dan kemudian memanggil berbagai pabrik yang mengimplementasikan antarmuka ini yang seharusnya memiliki implementasi yang berbeda dari metode yang sama berdasarkan beberapa kriteria. Sebagai contoh, kami memiliki antarmuka ButtonCreationFactory, yang diimplementasikan oleh dua pabrik, WindowsButtonCreationFactory pertama (membuat tombol dengan tampilan dan nuansa Windows) dan LinuxButtonCreationFactory kedua (membuat tombol dengan tampilan dan nuansa Linux). Jadi kedua pabrik ini memiliki metode pembuatan yang sama dengan implementasi yang berbeda (algoritma).
Misalnya jika Anda ingin tombol dengan Linux terlihat dan terasa:
atau jika Anda ingin tombol Windows
Tepat dalam kasus ini, ia menghasilkan semacam pola strategi, karena ia membedakan algoritma untuk melakukan beberapa kreasi. Namun, itu berbeda dari itu secara semantik karena digunakan untuk OBJECT CREATION daripada algoritma operasional. Jadi, pada dasarnya dengan pabrik abstrak Anda memiliki pembuatan objek menggunakan strategi yang berbeda, yang membuatnya sangat mirip dengan pola strategi. Namun AbstractFactory bersifat kreatif, sedangkan pola Strategi operasional. Dari segi implementasi, hasilnya sama saja.
sumber
Factory (dan FactoryMethod dikembalikan oleh Factory) :
Lihat artikel wikipedia ini dan artikel yang dikunjungi di internet
Pola strategi:
Contoh:
Anda dapat mengonfigurasi strategi Diskon untuk item tertentu (tiket AirFare atau item ShoppingCart). Dalam contoh ini, Anda akan menawarkan diskon 25% untuk item selama bulan Juli - Desember dan Tidak ada diskon untuk item tersebut selama Jaunary - Juni.
Pos terkait:
Contoh Dunia Nyata dari Pola Strategi
Pola Desain: Metode Pabrik vs Pabrik vs Pabrik Abstrak
sumber
Untuk memperluas apa yang dikatakan Oscar dan mengacu pada kode-nya:
GetCommand adalah Factory dan kelas UnixCommand, WindowsCommand dan OSXCommand adalah Strategi
sumber
Pola strategi dalam istilah sederhana lebih merupakan penciptaan perilaku runtime di mana Anda tidak peduli dengan kelas implementasi. Di pabrik lain adalah pembuatan runtime instance kelas beton dan terserah kepada Anda untuk menggunakan perilaku (metode) yang diekspos oleh antarmuka yang diimplementasikan.
sumber
Anda tidak dapat memahami perbedaannya hanya dengan melihat kode atau kategorisasi. Untuk memahami pola GoF dengan benar, cari maksudnya:
Strategi: "Definisikan sekumpulan algoritme, enkapsulasi masing-masing, dan buatlah itu dapat dipertukarkan. Strategi memungkinkan algoritme berbeda dari klien yang menggunakannya."
Metode Pabrik: "Tentukan antarmuka untuk membuat objek, tetapi biarkan subclass memutuskan kelas mana yang akan dipakai. Metode Pabrik memungkinkan kelas menunda instantiasi ke subclass."
Dan inilah penjelasan terperinci tentang maksud dan perbedaan antara dua pola ini: Perbedaan antara Metode Pabrik dan pola desain Strategi
sumber
Saya mungkin ngelantur dengan Oscar karena contoh penerapan Pabriknya agak erat dan sangat tertutup, tidak heran pilihan Anda adalah pola Strategi. Implementasi Pabrik tidak boleh bergantung pada jumlah tertentu dari kelas tertentu yang sedang dipakai, misalnya:
Saya kira kriteria yang paling tepat untuk memilih satu atau yang lain sebagian besar adalah istilah yang Anda terapkan untuk menyebutkan kelas dan metode Anda, dengan mempertimbangkan kita semua harus cenderung memprogram untuk antarmuka dan bukan ke kelas dan juga fokus pada tujuan: kami bertujuan untuk menentukan kode mana yang akan dieksekusi saat runtime. Yang mengatakan, kita dapat mencapai tujuan dengan menggunakan salah satu dari kedua pola tersebut.
sumber
Strategi dan Pabrik adalah tujuan yang berbeda. Dalam strategi Anda memiliki pendekatan yang ditentukan, menggunakan pola ini Anda dapat menukar perilaku (algoritma). Datang ke Pabrik ada banyak variasi di sekitar. Tetapi pola asli dari GO4 menyatakan pabrik meninggalkan pembuatan objek ke kelas anak. Di sini dengan pabrik Anda mengganti contoh lengkap bukan perilaku yang Anda minati. Dengan ini Anda akan mengganti sistem lengkap bukan algoritma.
sumber
Pola pabrik adalah pola kreasi, yang dibuat dengan properti yang ditentukan (perilaku). sementara pada saat dijalankan setelah pembuatan Anda tidak dapat mengubah sifat (perilaku) itu. jadi jika Anda memerlukan properti yang berbeda (perilaku) Anda harus menghapus objek dan membuat objek baru dengan properti yang diperlukan (perilaku). yang tidak gud. sedangkan dalam hal pola strategi, Anda dapat mengubah properti (perilaku) pada saat dijalankan.
sumber