Corak Kilang Abstrak di Jawa

1. Gambaran keseluruhan

Dalam artikel ini, kita akan membincangkan corak reka bentuk Abstrak Kilang.

Buku Reka Bentuk Pola: Elemen Perisian Berorientasikan Objek yang Boleh Digunakan Semula menyatakan bahawa Abstrak Kilang "menyediakan antara muka untuk membuat keluarga objek yang berkaitan atau bergantung tanpa menentukan kelas konkrit mereka". Dengan kata lain, model ini membolehkan kita membuat objek yang mengikut corak umum.

Contoh reka bentuk corak Kilang Abstrak dalam JDK adalah newInstance () daripada javax.xml.parsers.DocumentBuilderFactory kelas.

2. Contoh Corak Reka Bentuk Kilang Abstrak

Dalam contoh ini, kami akan membuat dua pelaksanaan corak Reka Bentuk Kaedah Kilang: AnimalFactory dan Color Factory.

Selepas itu, kami akan menguruskan akses kepada mereka menggunakan Abstract Factory AbstractFactory:

Pertama, kami akan membuat keluarga kelas Haiwan dan kemudian, akan menggunakannya di Abstrak Kilang kami.

Inilah antara muka Haiwan :

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

dan Bebek pelaksanaan konkrit :

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

Selanjutnya, kita dapat membuat pelaksanaan yang lebih konkrit antara muka Haiwan (seperti Anjing, Beruang, dll.) Dengan cara ini.

Abstrak Factory berurusan dengan keluarga objek yang bergantung. Dengan ini, kami akan memperkenalkan satu lagi warna keluarga sebagai antara muka dengan beberapa pelaksanaan ( Putih, Coklat,… ).

Kami akan melangkau kod sebenar buat masa ini, tetapi boleh didapati di sini.

Setelah kami menyediakan beberapa keluarga, kami dapat membuat antara muka AbstractFactory untuk mereka:

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

Seterusnya, kami akan melaksanakan AnimalFactory menggunakan corak reka bentuk Kaedah Kilang yang telah kami bincangkan di bahagian 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; } } 

Begitu juga, kita dapat melaksanakan kilang untuk antara muka Warna menggunakan corak reka bentuk yang sama.

Apabila semua ini disiapkan, kami akan membuat kelas FactoryProvider yang akan memberi kami pelaksanaan AnimalFactory atau ColorFactory bergantung pada argumen yang kami sediakan untuk kaedah 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. Bilakah Menggunakan Corak Kilang Abstrak:

  • Pelanggan tidak bergantung pada bagaimana kita membuat dan menyusun objek dalam sistem
  • Sistem ini terdiri daripada sekumpulan objek, dan keluarga ini dirancang untuk digunakan bersama
  • Kita memerlukan nilai jangka masa untuk membina kebergantungan tertentu

Walaupun coraknya bagus semasa membuat objek yang telah ditentukan, menambah yang baru mungkin mencabar . Untuk menyokong jenis objek baru akan memerlukan perubahan kelas AbstractFactory dan semua subkelasnya.

4. Ringkasan

Dalam artikel ini, kami belajar mengenai corak reka bentuk Abstrak Kilang.

Akhirnya, seperti biasa, pelaksanaan contoh-contoh ini dapat dilihat di GitHub.