Abstrak Pola Pabrik di Jawa

1. Ikhtisar

Pada artikel ini, kita akan membahas pola desain Pabrik Abstrak.

Buku Design Patterns: Elements of Reusable Object-Oriented Software menyatakan bahwa Pabrik Abstrak “menyediakan antarmuka untuk membuat keluarga objek terkait atau bergantung tanpa menentukan kelas konkretnya”. Dengan kata lain, model ini memungkinkan kita membuat objek yang mengikuti pola umum.

Contoh pola desain Pabrik Abstrak di JDK adalah newInstance () dari kelas javax.xml.parsers.DocumentBuilderFactory .

2. Contoh Pola Desain Pabrik Abstrak

Dalam contoh ini, kita akan membuat dua implementasi pola Desain Metode Pabrik: AnimalFactory dan Color Factory.

Setelah itu, kami akan mengelola akses ke mereka menggunakan Pabrik Abstrak Pabrik Abstrak:

Pertama, kita akan membuat keluarga kelas Hewan dan, nanti, akan menggunakannya di Pabrik Abstrak kita.

Inilah antarmuka Hewan :

public interface Animal { String getAnimal(); String makeSound(); }

dan Bebek implementasi konkret :

public class Duck implements Animal { @Override public String getAnimal() { return "Duck"; } @Override public String makeSound() { return "Squeks"; } } 

Selanjutnya, kita dapat membuat implementasi yang lebih konkret dari antarmuka Hewan (seperti Anjing, Beruang, dll.) Persis dengan cara ini.

Pabrik Abstrak berurusan dengan keluarga objek yang bergantung. Dengan pemikiran tersebut, kami akan memperkenalkan satu lagi keluarga Color sebagai antarmuka dengan beberapa implementasi ( Putih, Coklat,… ).

Kami akan melewatkan kode sebenarnya untuk saat ini, tetapi dapat ditemukan di sini.

Sekarang kita telah menyiapkan banyak keluarga, kita dapat membuat antarmuka AbstractFactory untuk mereka:

public interface AbstractFactory { T create(String animalType) ; }

Selanjutnya, kita akan mengimplementasikan AnimalFactory menggunakan pola desain Metode Pabrik yang telah kita diskusikan di bagian sebelumnya:

public class AnimalFactory implements AbstractFactory { @Override public Animal create(String animalType) { if ("Dog".equalsIgnoreCase(animalType)) { return new Dog(); } else if ("Duck".equalsIgnoreCase(animalType)) { return new Duck(); } return null; } } 

Demikian pula, kami dapat menerapkan pabrik untuk antarmuka Warna menggunakan pola desain yang sama.

Saat semua ini disetel, kita akan membuat kelas FactoryProvider yang akan memberi kita implementasi AnimalFactory atau ColorFactory bergantung pada argumen yang kita berikan ke metode getFactory () :

public class FactoryProvider { public static AbstractFactory getFactory(String choice){ if("Animal".equalsIgnoreCase(choice)){ return new AnimalFactory(); } else if("Color".equalsIgnoreCase(choice)){ return new ColorFactory(); } return null; } }

3. Kapan Menggunakan Pola Pabrik Abstrak:

  • Klien tidak bergantung pada cara kami membuat dan menyusun objek dalam sistem
  • Sistem terdiri dari beberapa kelompok objek, dan kelompok ini dirancang untuk digunakan bersama
  • Kita membutuhkan nilai run-time untuk membangun ketergantungan tertentu

Meskipun polanya bagus saat membuat objek yang telah ditentukan sebelumnya, menambahkan yang baru mungkin menantang . Untuk mendukung tipe objek baru akan membutuhkan perubahan kelas AbstractFactory dan semua subkelasnya.

4. Ringkasan

Pada artikel ini, kita belajar tentang pola desain Pabrik Abstrak.

Terakhir, seperti biasa, implementasi contoh-contoh ini dapat ditemukan di GitHub.