Mode Metode Pabrik
Motivasi untuk membuat objek sering membutuhkan proses yang kompleks, sehingga tidak cocok untuk dimasukkan dalam pabrik gabungan. Ketika ada produk baru, pabrik komposit perlu dimodifikasi, yang tidak kondusif untuk ekspansi.
Selain itu, pembuatan beberapa objek dapat memerlukan informasi yang tidak dapat diakses oleh pabrik gabungan. Oleh karena itu, tentukan antarmuka pabrik dan tentukan produk mana yang dipakai dengan mengimplementasikan antarmuka ini. Ini adalah pola metode pabrik, yang menunda instantiasi kelas ke subkelas.
Tujuan
1. Tentukan antarmuka dan biarkan subkelas memutuskan produk mana yang akan disesuaikan.
2. Buat objek melalui antarmuka umum.
menyelesaikan
1. Antarmuka produk dan produk tertentu mudah dimengerti.
2. Kelas pabrik menyediakan metode pabrik yang mengembalikan objek produk. Tetapi metode pabrik ini abstrak.
3. Menerapkan metode pabrik di pabrik -pabrik tertentu dan menyelesaikan pembuatan produk tertentu.
// Beberapa tombol Kelas Kelas Tombol {/* ...*/} Kelas WinButton Memperluas Tombol {/* ...*/} kelas MacButton memperluas tombol {/* ...*/} // Kelas pabrik mereka Tombol antarmuka Tombol {Abstrak CreateButton (); } kelas winbuttonFactory mengimplementasikan tombol {tombol createButton () {return new winbutton (); }} kelas macbuttonfactory mengimplementasikan tombolFactory {tombol createButton () {return new macbutton (); }} Skenario yang berlaku
1. Ketika ada lebih banyak kode duplikat saat membuat objek, Anda dapat mempertimbangkan menggunakan pola metode pabrik untuk menjalankan bagian duplikat ini.
2. Membuat objek memerlukan akses ke informasi tertentu, yang tidak boleh dimasukkan dalam kelas pabrik. Kemudian subkelas dapat mengimplementasikan pembuatan objek.
3. Ketika Anda perlu mengelola secara terpusat penciptaan objek untuk mempertahankan konsistensi program.
Pola pabrik abstrak
Mendefinisikan pola pabrik abstrak menyediakan cara untuk merangkum satu set pabrik terpisah dengan tema yang sama. Dalam penggunaan normal, program klien perlu membuat implementasi konkret dari pabrik abstrak, dan kemudian menggunakan pabrik abstrak sebagai antarmuka untuk membuat objek konkret untuk topik ini. Program klien tidak perlu mengetahui (atau peduli) bahwa ia mendapatkan jenis objek spesifik dari metode pabrik internal ini, karena program klien hanya menggunakan antarmuka umum dari objek -objek ini. Pola pabrik abstrak memisahkan detail implementasi dari satu set objek dari penggunaan umum mereka.
"Pabrik" adalah tempat produk (objek) dibuat, dan tujuannya adalah untuk memisahkan penciptaan produk dari penggunaannya. Tujuan dari model pabrik abstrak adalah untuk memisahkan antarmuka beberapa produk abstrak dari implementasi spesifik dari berbagai produk tema. Dengan cara ini, saat menambahkan pabrik spesifik baru, Anda tidak perlu memodifikasi kode klien yang merujuk pabrik abstrak.
Menggunakan pola pabrik abstrak memungkinkan Anda untuk mengubah pabrik spesifik tanpa memodifikasi kode klien menggunakan pabrik, bahkan saat runtime. Namun, menggunakan pola ini atau pola desain serupa dapat membawa kompleksitas yang tidak perlu dan pekerjaan tambahan untuk menulis kode. Penggunaan pola desain yang tepat dapat mengimbangi "pekerjaan tambahan" seperti itu.
menyelesaikan
1. AbstractFactory - Menentukan metode antarmuka untuk membuat produk abstrak.
2. Concretefactory - Implementasikan metode untuk membuat produk tertentu.
3. Abstrak Produk - Antarmuka yang menyatakan berbagai jenis produk.
4. Produk - Tentukan produk spesifik yang sesuai dengan Concretefactory dan mengimplementasikan antarmuka Abstrak Produk.
5. Klien - Gunakan kelas abstrak dan produk abstrak.
Abstrak kelas abstrakproducta {public abstrak void operasiA1 (); public abstrak void operasiA2 (); } class Producta1 memperluas abstrak abstrakproducta {producta1 (string arg) {system.out.println ("hello"+arg); } // terapkan kode di sini public void operasiA1 () {}; public void operasiA2 () {}; } class producta2 memperluas abstrak abstrakproducta {producta2 (string arg) {system.out.println ("hello"+arg); } // terapkan kode di sini public void operasiA1 () {}; public void operasiA2 () {}; } abstrak kelas abstrakproductb {// public abstrak void OperationB1 (); // Publik abstrak batal OperationB2 (); } class ProductB1 memperluas abstrak abstrakproductb {productB1 (string arg) {system.out.println ("hello"+arg); } // terapkan kode di sini} class productB2 memperluas abstrak abstrakproductb {productb2 (string arg) {system.out.println ("hello"+arg); } // Implementasikan kode di sini} Abstrak kelas abstrakFactory {abstrak abstrak abstrakproducta createProducta (); Abstrak Abstrak ProductB createProductB (); } class concretefactory1 memperluas AbstractFactory {AbstractProducta createProducta () {return new Producta1 ("Producta1"); } AbstractProductB createProductB () {return new ProductB1 ("ProductB1"); }} class concretefactory2 memperluas AbstractFactory {AbstractProducta createProducta () {return new Producta2 ("Producta2"); } AbstractProductB createProductB () {return new ProductB2 ("ProductB2"); }} // Pencipta pabrik - cara tidak langsung untuk instantiating kelas pabrik pabrik {private static abstractFactory pf = null; Static AbstractFactory getFactory (string choice) {if (choice.equals ("a")) {pf = new Concretefactory1 (); } else if (choice.equals ("b")) {pf = new concretefactory2 (); } return pf; }} // Klien Kelas Publik Klien {public static void main (string args []) {AbstractFactory pf = factorymaker.getFactory ("a"); AbstractProducta Product = PF.CreateProducta (); // lebih banyak fungsi panggilan pada produk}}Kelas pembuat pabrik menggunakan mode pabrik sederhana, sementara implementasi pabrik spesifik menggunakan mode metode pabrik.
Skenario yang berlaku
1. Suatu sistem tidak tergantung pada penciptaan, komposisi, dan representasi produknya.
2. Ketika suatu sistem dikonfigurasi oleh salah satu dari banyak keluarga produk.
3. Penting untuk menekankan desain serangkaian objek produk terkait untuk penggunaan bersama.
4. Berikan pustaka produk, dan hanya ingin menampilkan antarmuka mereka alih -alih implementasi.
keuntungan
1. Produk spesifik dipisahkan dari kode pelanggan
2. Seri yang dapat dengan mudah berubah
3. Buat serangkaian keluarga produk bersama
kekurangan
1. Sulit untuk memperluas produk baru dalam keluarga produk, ini membutuhkan memodifikasi antarmuka pabrik abstrak dan pabrik spesifik.