Uzorak tvornice sažetaka u Javi

1. Pregled

U ovom ćemo članku razgovarati o uzorku dizajna Abstract Factory.

Knjiga Dizajn uzoraka: elementi višekratno korištenog objektno orijentiranog softvera navodi da je Factory Factory "Pruža sučelje za stvaranje obitelji srodnih ili ovisnih objekata bez navođenja njihovih konkretnih klasa". Drugim riječima, ovaj nam model omogućuje stvaranje predmeta koji slijede opći obrazac.

Primjer uzorka dizajna apstraktne tvornice u JDK je newInstance () od javax.xml.parsers.DocumentBuilderFactory razred.

2. Primjer uzorka apstraktnog tvorničkog dizajna

U ovom primjeru stvorit ćemo dvije implementacije uzorka Factory Method Design: AnimalFactory i BojaTvornica.

Nakon toga pristupit ćemo im pristupom pomoću Tvornice sažetaka SažetakTvornica:

Prvo ćemo stvoriti obitelj Životinja klase i kasnije će ga koristiti u našoj Tvornici sažetaka.

Evo Životinja sučelje:

javno sučelje Animal {String getAnimal (); String makeSound (); }

i konkretna provedba Patka:

patka javne klase implementira Animal {@Override public String getAnimal () {return "Patka"; } @Override public String makeSound () {return "Squeks"; }} 

Nadalje, možemo stvoriti konkretnije implementacije Životinja sučelje (poput Pas, medvjed, itd.) upravo na ovaj način.

Tvornica sažetaka bavi se obiteljima ovisnih predmeta. Imajući to na umu, predstavit ćemo još jednu obitelj Boja kao sučelje s nekoliko implementacija (Bijela, smeđa ...).

Zasad ćemo preskočiti stvarni kôd, ali ga možete pronaći ovdje.

Sad kad imamo više obitelji spremnih, možemo stvoriti SažetakTvornica sučelje za njih:

javno sučelje AbstractFactory {T create (String animalType); }

Dalje ćemo implementirati AnimalFactory koristeći obrazac dizajna tvorničke metode o kojem smo govorili u prethodnom odjeljku:

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

Slično tome, možemo implementirati tvornicu za Boja sučelje koristeći isti obrazac dizajna.

Kad se sve ovo postavi, stvorit ćemo FactoryProvider klase koja će nam pružiti implementaciju AnimalFactory ili ColorFactory ovisno o argumentu koji dostavljamo getFactory () metoda:

javna klasa FactoryProvider {javna statička AbstractFactory getFactory (izbor niza) {if ("Animal" .equalsIgnoreCase (izbor)) {return new AnimalFactory (); } else if ("Color" .equalsIgnoreCase (izbor)) {return new ColorFactory (); } return null; }}

3. Kada koristiti apstraktni tvornički uzorak:

  • Klijent je neovisan o tome kako stvaramo i komponiramo objekte u sustavu
  • Sustav se sastoji od više obitelji objekata, a te su obitelji dizajnirane za zajedničku upotrebu
  • Za konstrukciju određene ovisnosti potrebna nam je vrijednost vremena izvođenja

Iako je uzorak izvrstan prilikom stvaranja unaprijed definiranih objekata, dodavanje novih možda će biti izazov. Za podršku novoj vrsti objekata bit će potrebna promjena SažetakTvornica razred i sve njegove podrazrede.

4. Sažetak

U ovom smo članku saznali o uzorku dizajna Abstract Factory.

Napokon, kao i uvijek, provedba ovih primjera može se naći na GitHubu.