Pembaca seperti Anda membantu mendukung MUO. Saat Anda melakukan pembelian menggunakan tautan di situs kami, kami dapat memperoleh komisi afiliasi. Baca selengkapnya.

Pola desain pabrik (atau metode pabrik) berspesialisasi dalam delegasi dan enkapsulasi. Pola ini memungkinkan superclass untuk menunda instantiasi ke subclass. Ini karena kelas yang berisi pola metode pabrik utama adalah abstrak.

Versi asli dari metode pabrik mengasumsikan bentuk metode yang tidak diimplementasikan karena tidak mengetahui produk yang akan dibuatnya. Metode pabrik mungkin mengetahui bahwa ia sedang membuat suatu produk, tetapi ia tidak mengetahui karakteristik khusus dari produk yang akan dibuatnya. Pengetahuan ini hanya tersedia untuk masing-masing subclass. Oleh karena itu, tanggung jawab untuk mengimplementasikan metode pabrik dan membuat objek yang sesuai semata-mata merupakan subkelas.

Menerapkan Pola Desain Pabrik di Jawa

Artikel ini menggunakan contoh aplikasi pembuatan laporan umpan balik. Aplikasi ini menggunakan berbagai jenis umpan balik yang diterima perusahaan (untuk camilan baru) untuk membuat laporan khusus (menggunakan metode pabrik). Oleh karena itu, pola pabrik akan membuat umpan balik khusus (atau laporan umpan balik), dengan menggunakan kelas produk utama berikut sebagai basis:

instagram viewer

publikabstrakkelasMasukan{

pribadi Rangkaian namapeninjau;
pribadi Rangkaian ulasanPesan;
pribadiint peringkat ulasan;

publikMasukan(String namapeninjau, String ulasanMessage, int peringkat ulasan){
ini.reviewerName = namareviewer;
ini.reviewMessage = pesanulasan;
ini.reviewRatings = Nilaiulasan;
}

publik Rangkaian getReviewerName(){
kembali namapeninjau;
}
publikruang kosongsetReviewerName(String nama peninjau){
ini.reviewerName = namareviewer;
}
publik Rangkaian getReviewMessage(){
kembali ulasanPesan;
}
publikruang kosongsetReviewMessage(String reviewMessage){
ini.reviewMessage = pesanulasan;
}
publikintgetReviewRatings(){
kembali peringkat ulasan;
}
publikruang kosongsetReviewRatings(int peringkat ulasan){
ini.reviewRatings = Nilaiulasan;
}
}

Setiap umpan balik akan memiliki tiga properti wajib, nama peninjau, pesan ulasan, dan peringkat angka (dari satu hingga lima) untuk camilan baru. Berbagai jenis umpan balik yang akan diterima perusahaan akan datang dari salah satu dari tiga saluran:

Kelas Umpan Balik Email

publikkelasUmpan Balik EmailmemanjangMasukan{

pribadi Rangkaian email peninjau;

umpan balik email publik (Rangkaian namapeninjau, Rangkaian pesan ulasan, int peringkat ulasan, Rangkaian email peninjau) {
super(reviewerName, reviewMessage, reviewRatings);
ini.reviewerEmail = emailpeninjau;
}
publik Rangkaian getReviewerEmail(){
kembali email peninjau;
}
publikruang kosongsetReviewerEmail(String PeninjauEmail){
ini.reviewerEmail = emailpeninjau;
}
}

Kelas Umpan Balik Surat

publikkelasUmpan Balik SuratmemanjangMasukan{

pribadi Rangkaian alamat pengembalian;

umpan balik surat publik (Rangkaian namapeninjau, Rangkaian pesan ulasan, int peringkat ulasan, Rangkaian alamat pengembalian) {
super(reviewerName, reviewMessage, reviewRatings);
ini.returnAddress = kembaliAlamat;
}

publik Rangkaian getReturnAddress(){
kembali alamat pengembalian;
}

publikruang kosongsetReturnAddress(String alamat pengembalian){
ini.returnAddress = kembaliAlamat;
}
}

Kelas Umpan Balik Media Sosial

publikkelasUmpan Balik Media SosialmemanjangMasukan{

pribadi Rangkaian peninjauMenangani;

umpan balik media sosial publik (Rangkaian namapeninjau, Rangkaian pesan ulasan, int peringkat ulasan, Rangkaian peninjauHandle) {
super(reviewerName, reviewMessage, reviewRatings);
ini.reviewerHandle = peninjauHandle;
}

publik Rangkaian getReviewerHandle(){
kembali peninjauMenangani;
}

publikruang kosongsetReviewerHandle(Tangan peninjau string){
ini.reviewerHandle = peninjauHandle;
}
}

Anda akan melihat bahwa setiap subkelas umpan balik memiliki properti unik. Artinya, Anda harus membuat laporan untuk setiap jenis umpan balik menggunakan setidaknya satu properti yang unik untuk jenis tersebut.

Pabrik Sederhana

Pabrik sederhana adalah pendekatan populer untuk menggunakan pola desain pabrik. Pendekatan ini memerlukan pengelompokan semua umpan balik (atau produk) yang berbeda dalam suatu metode (pabrik sederhana) dan memilih umpan balik yang sesuai berdasarkan parameter.

publikkelasFeedbackReportFactory{

publik Masukan makeFeedback(Jenis umpan balik string){
Umpan balik umpan balik = batal;

jika(Jenisumpan balik.sama dengan("surel")) {
umpan balik = baru Umpan Balik Email();
}kalau tidakjika (Jenisumpan balik.sama dengan("surat")) {
umpan balik = baru MailFeedback();
}kalau tidakjika (Jenisumpan balik.sama dengan("sosial")) {
umpan balik = baru SocialMediaFeedback();
}
kembali masukan;
}
}

Namun, pendekatan pabrik yang sederhana bukanlah pola desain pabrik, juga bukan pola desain. Ini lebih seperti konsep desain.

Metode Pabrik

Metode pabrik adalah representasi sebenarnya dari pola desain. Menggunakan metode pabrik, yang direformasi FeedbackReportFactorykelas Jawa sekarang akan berisi kode berikut:

publikabstrakkelasFeedbackReportFactory{
publikabstrakruang kosongmakeFeedbackReport(Umpan balik umpan balik);
}

Anda dapat menentukan struktur pola desain pabrik dengan diagram kelas berikut:

Dari diagram di atas Anda akan melihat bahwa kelas abstrak (atau antarmuka) akan berisi versi abstrak dari metode pabrik. Jadi, kelas pabrik beton yang memperluas kelas abstrak akan mengimplementasikan metode pabrik, menggunakan properti yang unik untuk produk yang ingin dibuatnya. Anda juga harus mencatat bahwa setiap kelas pabrik beton harus membuat satu atau lebih produk.

Aplikasi sampel memiliki tiga produk terkait tetapi unik. Setiap jenis umpan balik memiliki setidaknya satu properti unik. Jadi, aplikasi tersebut membutuhkan tiga pabrik beton untuk membangun setiap produk.

Pabrik Umpan Balik Email

publikkelasEmailFeedbackReportmemanjangFeedbackReportFactory{

umpan balik EmailUmpan balik;

@Mengesampingkan
publikruang kosongmakeFeedbackReport(Umpan balik umpan balik){

ini.feedback = (EmailFeedback) umpan balik;

Sistem.keluar.println("\nLaporkanUntukMasukanMelaluiSurel" +
"\nNama Peninjau: " +ini.feedback.getReviewerName() +
"\nMasukan: " + ini.feedback.getReviewMessage() +
"\nPeringkat: " + ini.feedback.getReviewRatings() +
"\nAlamat Email: " + ini.feedback.getReviewerEmail());
}
}

Pabrik Umpan Balik Surat

publikkelasMailFeedbackReportmemanjangFeedbackReportFactory{
umpan balik MailFeedback;

@Mengesampingkan
publikruang kosongmakeFeedbackReport(Umpan balik umpan balik){
ini.feedback = (MailFeedback) umpan balik;

Sistem.keluar.println("\nLaporkanUntukMasukanMelaluiSurat" +
"\nNama Peninjau: " +ini.feedback.getReviewerName() +
"\nMasukan: " + ini.feedback.getReviewMessage() +
"\nPeringkat: " + ini.feedback.getReviewRatings() +
"\nAlamat Surat: " + ini.feedback.getReturnAddress());
}
}

Pabrik Umpan Balik Media Sosial

publikkelasLaporan Umpan Balik Media SosialmemanjangFeedbackReportFactory{
Umpan balik SocialMediaFeedback;

@Mengesampingkan
publikruang kosongmakeFeedbackReport(Umpan balik umpan balik){
ini.feedback = (SocialMediaFeedback) umpan balik;

Sistem.keluar.println("\nLaporkanUntukMasukanMelaluiSosialMedia" +
"\nNama Peninjau: " + ini.feedback.getReviewerName() +
"\nMasukan: " + ini.feedback.getReviewMessage() +
"\nPeringkat: " + ini.feedback.getReviewRatings() +
"\nPegangan Media Sosial Peninjau: " + ini.feedback.getReviewerHandle());
}
}

Menguji Aplikasi Sampel

Sekarang Anda dapat menggunakan masing-masing metode pabrik untuk membuat laporan miniatur tentang umpan balik yang diterima dari berbagai saluran. Kamu bisa menguji aplikasi menggunakan JUnit, atau Anda dapat membuat kelas driver:

publikkelasUtama{

publikstatisruang kosongutama(String[] argumen){
Umpan balik umpan balik = baru Umpan Balik Email("Nick", "Produk hebat!", 5, "[email protected]");
Umpan balik umpan balik2 = baru SuratUmpan Balik("john", "Produknya bagus tapi bukan sesuatu yang akan saya beli secara teratur", 4, "jalan pertama");
Umpan balik umpan balik3 = baru Umpan Balik Media Sosial("Jane", "Ini bukan untukku", 2, "@janey");

FeedbackReportFactory pabrik = baru EmailFeedbackReport();
Umpan balikLaporanFactory factory2 = baru MailFeedbackReport();
Umpan BalikLaporanFactory factory3 = baru SocialMediaFeedbackReport();

pabrik.makeFeedbackReport(masukan);
pabrik2.makeFeedbackReport(umpan balik2);
pabrik3.makeFeedbackReport(umpan balik3);
}

Kelas Utama di atas menggunakan masing-masing pabrik untuk membuat tiga laporan, menghasilkan keluaran berikut di konsol:

Keuntungan Menggunakan Pola Desain Pabrik

Pola desain pabrik mempromosikan fleksibilitas desain, di mana Anda menggunakan antarmuka (atau kelas abstrak) untuk membuat kelas konkret. Ini juga mempromosikan skalabilitas melalui polimorfisme, dengan mengizinkan kelas baru untuk mengimplementasikan antarmuka yang ada saat aplikasi berkembang.

Saat Anda menggunakan pola desain pabrik, Anda menggunakan dua prinsip desain penting: Terbuka-tertutup dan Pembalikan Kontrol (IoC).