Subscribe

Abstract factory

AbstractFactoryFeatureImage

Factory patern je verovatno jedan od najčešće korišćenih paterna u modernim programskim jezicima.

Ovaj patern omogućava sledeće:

  • skrivanje procesa kreiranja objekta (tj. instanciranja) iza factory metode
  • referenciranje novokreiranog objekta kroz zajednički interfejs

Metode  u abstract factory paternu su implementirae kao factory metode.

Factory metoda kreira instancu nekog objekta npr:

Factory metode se koriste u sledećim scenarijima:

  • klasa ne može da predvidi koji tip objekta treba da kreira
    (to znači, da u vreme kodiranja, konkretna instanca objekta nije poznata tj.:  DokumentFaktura d = new DokumentFaktura();  ili  DokumentPonuda dp = new DokumentPonuda();  jer će taj podatak biti poznat u vreme izvršavanja programa,  tj. zavisi od toga šta će korisnik izabrati iz liste ponuđenih vrsta dokumenata) 
  • kada želite da lokalizujete “znanje” koja će klasa biti kreirana (npr. kreirate metodu KreirajDokument koja na osnovu nekih ulaznih parametara određuje koji konkretan dokument biti kreiran)
  • kada hoćemo klijenta da oslobodimo odgovornosti koja će konkretna instanca biti kreirana i konfigurisana (ovde reč klijent koristimo u kontekstu korisnika metode npr. ako imamo metodu KreirajDokument  klasu DokumentManager koja koristi ovu metodu na sledeći način:
    onda je klasa DokumetManager klijent.)

Abstract factory patern se koristi kada želimo da kreiramo objekat, koji predstavlja factory za neki drugi skup objekata.

Ovaj patern omogućava da lako dodajemo novi skup klasa koji predstavljaju novi proizvod.

Dijagram klasa koji prikazuje abstract factory izgleda ovako:

AbstractFactory

Ako se fokusiramo na jednu celinu na sledeći način:

AbstractFactory-1

možemo videti da je ceo fokus ustvari na tome da se klijent odvoji od znanja koje konkretne proizvode koristi, a nama je olakšano dodavanje novog proizvoda, bez da menjamo (mi ili neko drugi) bilo šta u klijentskom kodu.

Ovde vidimo da abstract factory definiše interfejs koji sve konkretne factory klase treba da implementiraju.

Iako nismo dali primer u nekom od programskih jezika ako ste razumeli suštinu probajte sledeću vežbu.

Probajte da modelirate fabriku automobila koja proizvodi različite modele automobila koristeći ovaj patern.

Dijagrami u ovom postu su crtani alatom Enterprise Architect.

Leave a Reply