Saya membaca pola desain dari sebuah situs web
Di sana saya membaca tentang Factory, Factory method, dan abstrak Factory tetapi mereka sangat membingungkan, tidak jelas tentang definisi. Menurut definisi
Factory - Membuat objek tanpa memaparkan logika instantiation ke klien dan merujuk ke objek yang baru dibuat melalui antarmuka umum. Adalah versi yang disederhanakan dari Metode Pabrik
Metode Pabrik - Menentukan antarmuka untuk membuat objek, tetapi biarkan subclass untuk memutuskan kelas mana yang akan dipakai dan merujuk ke objek yang baru dibuat melalui antarmuka umum.
Abstrak Pabrik - Menawarkan antarmuka untuk membuat keluarga objek terkait, tanpa secara eksplisit menentukan kelas mereka.
Saya juga melihat threadoverflow lainnya tentang Abstract Factory vs Factory Method tetapi diagram UML yang dibuat di sana membuat pemahaman saya lebih buruk.
Adakah yang bisa tolong beri tahu saya
- Bagaimana ketiga pola ini berbeda satu sama lain?
- Kapan menggunakan yang mana?
- Dan juga jika memungkinkan, ada contoh java yang terkait dengan pola ini?
sumber
Jawaban:
Ketiga jenis Pabrik melakukan hal yang sama: Mereka adalah "konstruktor pintar".
Katakanlah Anda ingin dapat membuat dua jenis Buah: Apple dan Orange.
Pabrik
Pabrik "diperbaiki", karena Anda hanya memiliki satu implementasi tanpa subklasifikasi. Dalam hal ini, Anda akan memiliki kelas seperti ini:
Use case: Membangun Apple atau Orange agak terlalu rumit untuk ditangani dalam konstruktor untuk keduanya.
Metode Pabrik
Metode pabrik umumnya digunakan ketika Anda memiliki beberapa pemrosesan generik di kelas, tetapi ingin memvariasikan jenis buah apa yang sebenarnya Anda gunakan. Begitu:
... maka Anda dapat menggunakan kembali fungsi umum
FruitPicker.pickFruit()
dengan menerapkan metode pabrik di subclass:Pabrik Abstrak
Pabrik abstrak biasanya digunakan untuk hal-hal seperti injeksi ketergantungan / strategi, ketika Anda ingin dapat membuat seluruh keluarga objek yang harus "sejenis", dan memiliki beberapa kelas dasar yang sama. Berikut ini adalah contoh yang berhubungan dengan buah. Kasus penggunaan di sini adalah bahwa kami ingin memastikan bahwa kami tidak sengaja menggunakan OrangePicker di Apple. Selama kita mendapatkan Buah dan Pemetik dari pabrik yang sama, mereka akan cocok.
sumber
Factory: Membuat objek tanpa memaparkan logika instantiation kepada klien.
Metode Pabrik: Tentukan antarmuka untuk membuat objek, tetapi biarkan subclass memutuskan kelas mana yang akan dipakai. Metode Factory memungkinkan class defer instantiation ke subclass
Abstrak Pabrik: Menyediakan antarmuka untuk membuat keluarga objek terkait atau bergantung tanpa menentukan kelas konkret mereka.
AbstractFactory pola menggunakan komposisi untuk mendelegasikan tanggung jawab menciptakan objek ke kelas lain sedangkan pola desain metode pabrik menggunakan warisan dan bergantung pada kelas turunan atau sub kelas untuk membuat objek
Pabrik: Klien hanya perlu kelas dan tidak peduli tentang implementasi konkret yang diperolehnya.
Metode Pabrik: Klien tidak tahu kelas konkret apa yang harus dibuat saat runtime, tetapi hanya ingin mendapatkan kelas yang akan melakukan pekerjaan.
AbstactFactory: Ketika sistem Anda harus membuat banyak keluarga produk atau Anda ingin menyediakan perpustakaan produk tanpa memaparkan rincian implementasi.
Abstrak Kelas pabrik sering diterapkan dengan Metode Pabrik. Metode Pabrik biasanya disebut dalam Metode Templat.
Pabrik dan PabrikMetode
Maksud:
Tentukan antarmuka untuk membuat objek, tetapi biarkan sub kelas memutuskan kelas mana yang akan dipakai. Metode Pabrik memungkinkan instantiasi penangguhan kelas ke sub kelas.
Diagram UML :
Produk: Ini mendefinisikan antarmuka objek yang dibuat oleh metode Factory.
ConcreteProduct: Menerapkan antarmuka Produk
Pembuat: Menyatakan metode Pabrik
ConcreateCreator: Menerapkan metode Factory untuk mengembalikan instance dari ConcreteProduct
Pernyataan masalah: Buat Pabrik Game dengan menggunakan Metode Pabrik, yang mendefinisikan antarmuka game.
Cuplikan kode:
Pola Pabrik. Kapan harus menggunakan metode pabrik?
Perbandingan dengan pola kreasi lain:
Desain mulai menggunakan Metode Pabrik (kurang rumit, lebih dapat disesuaikan, subkelas berkembang biak) dan berkembang menuju Pabrik Abstrak, Prototipe, atau Builder (lebih fleksibel, lebih kompleks) ketika perancang menemukan di mana lebih banyak fleksibilitas diperlukan
Abstrak Kelas pabrik sering diimplementasikan dengan Metode Pabrik , tetapi mereka juga dapat diimplementasikan menggunakan Prototipe
Referensi untuk bacaan lebih lanjut: Pembuatan pola desain
sumber
Factory - Pisahkan kelas Factory untuk membuat objek yang kompleks.
Mis: kelas FruitFactory untuk membuat objek Fruit
Metode Pabrik - Alih-alih seluruh kelas yang terpisah untuk pabrik, cukup tambahkan satu metode di kelas itu sendiri sebagai pabrik.
Ex:
Metode Pabrik Abstrak - Pabrik Pabrik
Mis: Katakanlah kita ingin membangun pabrik untuk komponen komputer. Jadi ada beberapa jenis komputer seperti Laptop, Desktop, Server.
Jadi untuk setiap jenis komputer kita perlu pabrik. Jadi kami membuat satu pabrik tingkat tinggi seperti di bawah ini
Sekarang 3 ini sendiri adalah pabrik lagi. (Anda akan berurusan dengan PartFactory sendiri, tetapi di bawah tenda, akan ada implementasi terpisah berdasarkan apa yang Anda berikan di pabrik abstrak)
EDIT: diedit untuk menyediakan antarmuka yang tepat untuk Pabrik Abstrak sesuai dengan keberatan dalam komentar.
sumber
ComputerFactory
adalah Anda memiliki antarmuka pembuatan yang sama (getScreen(); getKeyboard(); getDiskdrive(); ...
), bukan antarmuka per jenis komputer seperti yang Anda sarankan. Anda dapat mencium masalah desain jika Anda menggunakan kata yang sama dua kali dalam pernyataan yang sama: Laptop Factory.get Laptop Part ().abstract Factory
bukan pabrik pabrik ... Ini adalahabstract class
atauinterface
mampu membuat objek yang akan diimplementasikan / diperluas dengan pabrik beton yang berbeda. Lihat jawaban yang diterima untuk detail kode. Dan tolong hapus atau edit jawaban Anda sesuai dengan itu.Setiap pola desain berkembang untuk membantu memastikan bahwa kode yang tertulis dan bekerja tidak tersentuh. Kita semua tahu bahwa begitu kita menyentuh kode kerja, ada cacat dalam alur kerja yang ada, dan lebih banyak pengujian perlu dilakukan untuk memastikan bahwa kita tidak merusak apa pun.
Pola pabrik membuat objek berdasarkan kriteria input, sehingga memastikan bahwa Anda tidak perlu menulis kode seperti jika ini kemudian membuat objek ini agak lain objek ini agak. Contoh yang baik dari ini adalah situs web perjalanan. Situs web perjalanan hanya dapat menyediakan perjalanan (penerbangan, kereta api, bus) atau / dan menyediakan hotel atau / dan menyediakan paket objek wisata. Sekarang, ketika pengguna memilih berikutnya, situs web perlu memutuskan objek apa yang perlu dibuat. Haruskah itu hanya membuat objek perjalanan atau hotel juga.
Sekarang, jika Anda membayangkan menambahkan situs web lain ke portofolio Anda, dan Anda yakin bahwa inti yang sama digunakan, misalnya, situs web carpooling, yang sekarang mencari taksi dan melakukan pembayaran online, Anda dapat menggunakan pabrik abstrak di inti Anda. Dengan cara ini Anda dapat mengambil satu pabrik taksi dan tempat parkir mobil.
Kedua pabrik tidak ada hubungannya dengan satu sama lain, jadi itu desain yang bagus untuk menjaga mereka di pabrik yang berbeda.
Semoga ini jelas sekarang. Pelajari kembali situs web ini dengan mengingat contoh ini, semoga akan membantu. Dan saya sangat berharap saya telah mewakili polanya dengan benar :).
sumber
Untuk jawaban ini, saya merujuk ke buku "Gang of Four".
Tidak ada definisi "Pabrik" atau "Pabrik Sederhana" atau "Pabrik Virtual" dalam buku ini. Biasanya ketika orang berbicara tentang pola "Pabrik" mereka mungkin berbicara tentang sesuatu yang menciptakan objek tertentu dari suatu kelas (tetapi bukan pola "pembangun"); mereka mungkin atau mungkin tidak merujuk pada pola "Metode Pabrik" atau "Pabrik Abstrak". Siapa pun dapat menerapkan "Pabrik" karena ia tidak akan melakukannya karena itu bukan istilah formal (ingatlah bahwa beberapa orang \ perusahaan \ komunitas dapat memiliki kosakata sendiri).
Buku itu saja berisi definisi untuk "Pabrik Abstrak" dan "Metode Pabrik".
Berikut adalah definisi dari buku ini dan penjelasan singkat mengapa keduanya bisa sangat membingungkan. Saya menghilangkan contoh kode karena Anda dapat menemukannya di jawaban lain:
Metode Pabrik (GOF) : Tentukan antarmuka untuk membuat objek, tetapi biarkan subclass memutuskan kelas mana yang akan dipakai. Metode Pabrik memungkinkan instantiasi penangguhan kelas ke subclass.
Abstract Factory (GOF) : Menyediakan antarmuka untuk membuat keluarga objek terkait atau bergantung tanpa menentukan kelas konkretnya.
Sumber Kebingungan : Seringkali, seseorang dapat memanggil kelas yang digunakan dalam pola "Metode Pabrik" sebagai "Pabrik". Kelas ini abstrak menurut definisi. Itu sebabnya mudah untuk menyebut kelas ini "Pabrik Abstrak". Tapi itu hanya nama kelasnya; Anda tidak harus bingung dengan pola "Pabrik Abstrak" (nama kelas! = nama pola). Pola "Pabrik Abstrak" berbeda - tidak menggunakan kelas abstrak; itu mendefinisikan antarmuka (tidak harus antarmuka bahasa pemrograman) untuk membuat bagian-bagian dari objek yang lebih besar atau objek yang terkait satu sama lain atau harus dibuat dengan cara tertentu.
sumber
Menggunakan Metode Pabrik, pengguna dapat membuat A1 atau A2 dari AbstractProductA.
Tapi Pabrik Abstrak memiliki lebih dari 1 metode pabrik (mis: 2 metode pabrik), dengan menggunakan metode pabrik itu akan membuat set objek / objek terkait. Menggunakan Abstract Factory, pengguna dapat membuat objek A1, B1 dari AbstractProductA, AbstractProductB
sumber
Tidak ada yang mengutip buku asli Pola Desain: Elemen Perangkat Lunak Berorientasi Objek Reusable , yang memberikan jawaban dalam dua paragraf pertama dari bagian "Diskusi Pola Penciptaan" (penekanan tambang):
sumber