Definisi: Tentukan antarmuka untuk membuat objek, biarkan subclass memutuskan kelas mana yang akan disesuaikan, dan metode pabrik menunda instantiasi kelas ke subkelasnya.
Jenis: Buat Diagram Kelas Pola Kelas:
Kode pola metode pabrik
antarmuka iproduct {public void ProductMethod (); } class Produk mengimplementasikan iProduct {public void ProductMethod () {System.out.println ("Product"); }} antarmuka Ifactory {public iProduct createProduct (); } class factory mengimplementasikan iFactory {public iProduct createProduct () {return new Product (); }} klien kelas publik {public static void main (string [] args) {iFactory factory = new factory (); Iproduct produce = factory.createProduct (); produce.productmethod (); }} Mode Pabrik:
Pertama -tama, kita perlu berbicara tentang model pabrik. Mode pabrik dibagi menjadi tiga jenis sesuai dengan tingkat abstraksi: mode pabrik sederhana (juga dikenal sebagai mode pabrik statis), mode metode pabrik yang dijelaskan dalam artikel ini, dan mode abstrak pabrik. Mode pabrik adalah model yang sering digunakan dalam pemrograman. Keuntungan utamanya adalah:
Ini dapat membuat struktur kode jelas dan secara efektif merangkum perubahan. Dalam pemrograman, instantiasi kelas produk terkadang kompleks dan dapat diubah. Melalui model pabrik, instantiasi produk dienkapsulasi, sehingga penelepon tidak perlu peduli dengan proses instantiasi produk, dan hanya mengandalkan pabrik untuk mendapatkan produk yang mereka inginkan.
Memblokir kategori produk tertentu dari penelepon. Jika Anda menggunakan mode pabrik, penelepon hanya peduli dengan antarmuka produk. Adapun implementasi spesifik, penelepon tidak perlu peduli sama sekali. Bahkan jika implementasi spesifik diubah, itu tidak akan berdampak pada penelepon.
Kurangi kopling. Instantiasi kelas produk biasanya sangat rumit. Dibutuhkan mengandalkan banyak kelas, dan kelas -kelas ini tidak perlu diketahui oleh penelepon sama sekali. Jika metode pabrik digunakan, yang perlu kita lakukan adalah instantiate kelas produk dan kemudian menyerahkannya ke penelepon untuk digunakan. Untuk penelepon, kelas -kelas yang bergantung pada produknya transparan.
Mode Metode Pabrik:
Melalui diagram kelas dari pola metode pabrik, kita dapat melihat bahwa pola metode pabrik memiliki empat elemen:
Antarmuka pabrik. Antarmuka pabrik adalah inti dari pola metode pabrik dan digunakan untuk menyediakan produk secara langsung dengan penelepon. Dalam pemrograman yang sebenarnya, kelas abstrak kadang -kadang digunakan sebagai antarmuka untuk berinteraksi dengan penelepon, yang pada dasarnya sama.
Implementasi pabrik. Dalam pemrograman, implementasi pabrik menentukan cara instantiate produk, yang merupakan cara untuk mencapai ekspansi. Jumlah produk yang diperlukan adalah implementasi pabrik spesifik sebanyak yang ada.
Antarmuka produk. Tujuan utama antarmuka produk adalah untuk menentukan spesifikasi produk, dan semua implementasi produk harus mematuhi spesifikasi yang ditentukan oleh antarmuka produk. Antarmuka produk adalah apa yang paling dipedulikan penelepon, dan kelebihan dan kekurangan definisi antarmuka produk secara langsung menentukan stabilitas kode penelepon. Demikian pula, antarmuka produk juga dapat diganti dengan kelas abstrak, tetapi berhati -hatilah untuk tidak melanggar prinsip penggantian Richter.
Implementasi Produk. Kategori spesifik antarmuka produk menentukan perilaku spesifik produk di klien.
Keuntungan Model Metode Pabrik:
1. Kemasan yang baik dan mengurangi kopling antar modul;
2. Menghadapi antarmuka produk dan memblokir kategori produk.
3. Kerangka Decoupling Khas. Modul tingkat tinggi hanya perlu mengetahui kelas abstrak produk.
4. Memenuhi Hukum Dimitese, Prinsip Ketergantungan pada Inversi, dan Prinsip Penggantian Richter.
Skenario yang berlaku:
Apakah itu model pabrik sederhana, model metode pabrik atau model pabrik abstrak, mereka memiliki karakteristik yang sama, sehingga skenario mereka yang berlaku juga serupa.
Pertama, sebagai pola kelas pembuatan, pola metode pabrik dapat digunakan di mana saja objek kompleks diperlukan. Satu hal yang perlu diperhatikan adalah bahwa objek kompleks cocok untuk menggunakan mode pabrik, sementara objek sederhana, terutama objek yang dapat dibuat melalui yang baru, tidak perlu menggunakan mode pabrik. Jika Anda menggunakan model pabrik, Anda perlu memperkenalkan kelas pabrik, yang akan meningkatkan kompleksitas sistem.
Kedua, model pabrik adalah mode decoupling yang khas, dan Hukum Dimitter sangat jelas dalam model pabrik. Jika penelepon perlu menambahkan dependensi untuk mengumpulkan produk sendiri, ia dapat mempertimbangkan untuk menggunakan model pabrik. Ini akan sangat mengurangi kopling antar objek.
Sekali lagi, karena model pabrik bergantung pada arsitektur abstrak, ia memberikan tugas instantiasi produk ke kelas implementasi untuk diselesaikan, yang memiliki skalabilitas yang lebih baik. Dengan kata lain, ketika sistem perlu lebih terukur, model pabrik dapat dipertimbangkan, dan produk yang berbeda dapat dikumpulkan dengan berbagai pabrik implementasi.
Aplikasi khas
Untuk mengilustrasikan keunggulan model pabrik, mungkin tidak ada contoh yang lebih tepat daripada merakit mobil. Skenarionya seperti ini: mobil terdiri dari mesin, roda, dan sasis, dan sekarang perlu untuk merakit mobil dan menyerahkannya kepada penelepon. Jika mode pabrik tidak digunakan, kode ini adalah sebagai berikut:
mesin kelas {public void getStyle () {System.out.println ("Ini adalah mesin mobil"); }} kelas Underpan {public void getStyle () {System.out.println ("Ini adalah sasis mobil"); }} roda kelas {public void getStyle () {System.out.println ("Ini adalah ban mobil"); }} klien kelas publik {public static void main (string [] args) {engine engine = engine baru (); Underpan Underpan = Underpan baru (); Roda roda = roda baru (); Mobil icar = mobil baru (underpan, roda, mesin); car.show (); }}Dapat dilihat bahwa untuk merakit mobil, penelepon juga perlu membuat instantiasi mesin, sasis dan ban, dan komponen mobil -mobil ini tidak tergantung pada penelepon, yang dengan serius melanggar undang -undang Dimitt dan memiliki kopling yang terlalu tinggi. Dan itu sangat tidak menguntungkan untuk ekspansi. Selain itu, dalam contoh ini, mesin, sasis, dan ban relatif spesifik. Dalam aplikasi yang sebenarnya, komponen produk ini mungkin abstrak, dan penelepon tidak tahu bagaimana merakit produk. Jika metode pabrik digunakan, seluruh arsitektur akan tampak jauh lebih jelas.
antarmuka Ifactory {public icar createCar (); } class pabrik mengimplementasikan Ifactory {public icar createCar () {engine engine = engine baru (); Underpan Underpan = Underpan baru (); Roda roda = roda baru (); Mobil icar = mobil baru (underpan, roda, mesin); mobil kembali; }} klien kelas publik {public static void main (string [] args) {iFactory factory = new factory (); Icar car = factory.createCar (); car.show (); }}Setelah menggunakan metode pabrik, derajat kopling di sisi panggilan sangat berkurang. Dan untuk pabrik, itu bisa diperluas. Jika Anda ingin mengumpulkan mobil lain di masa depan, Anda hanya perlu menambahkan implementasi pabrik lain. Fleksibilitas dan stabilitas telah sangat ditingkatkan.
PS: Mode Metode Pabrik dan Mode Pabrik Sederhana
Model pabrik sederhana yang disebutkan di atas sangat mirip dengan model metode pabrik. Inti dari kelas metode pabrik adalah kelas pabrik abstrak, sedangkan model pabrik sederhana menempatkan inti pada kelas konkret. Perbedaan dalam model metode pabrik dan model pabrik sederhana tidak terlalu jelas.