Definisanje interfejsa za kreiranje objekta, uz mogućnost da klasa prepusti potklasi kreiranje samog primerka (bilo da klasa ne može da zna klasu objekata koje treba da pravi ili da klasa namerno prepušta potklasama odluku o klasi primerka).
Često postoji potreba da se u objektno-orijentisanim sistemima kreiraju
objekti čiji konkretan tip nije poznat na mestu kreiranja.
Neka, na primer, u
sistemu postoji apstraktna klasa Document, čije su podklase
TextDocument i DrawingDocument .
Dalje, neka postoji klasa Application, sa podklasama
TextApplication i DrawingApplication.
Klasa Application sadrži zajednički kod manipulacije
dokumentima. Taj kod je takav da ne zavisi od konkretne vrste dokumenata
kojima se
manipuliše.
Na primer Application može da obavlja operacije
otvaranja, zatvaranja dokumenata, snimanja na
disku, prikazivanje na ekranu ,...
Ali kako Application ima potrebu i da
kreira nove dokumente, nastaje problem zbog toga što Application
"ne poznaje" tip dokumenata koje će da kreira (TextDocument ili
DrawingDocument), jer ovaj tip zavisi od konkretnog tipa aplikacije
(TextApplication ili DrawingApplication) koja se izvršava.
Zato je ovde koristan factory method DP.
Ideja:
Kreiranje objekata preneti na konkretnu aplikaciju koja se izvršava i time "sakriti" od aplikacije koja koristi te objekte . I obezbedti factory metod Create() koji je dostupan aplikaciji, ali čija implementacija zavisi od tipa konkretne aplikacije koja se izvršava.
Dijagram prikazKao što je već navedeno, od Application je "sakriveno" kreiranje različitih objekata tipa Document. Ovo kreiranje je ostavljeno FactoryMethod-u Create(), koji je apstraktan i koji je adekvatno definisan u potklasama (TextApplication i DrawingApplication). Time, dovoljno opšti kod (u smislu da je zadužen za manipulaciju dokumentima nezavisno od njhovog tipa i da je zajednički za sve aplikacije) unutar klase Application može da kreira odgovarajuće objekte. Ako je trenutna aplikacija TextApplication/ DrawingApplication, taj kod (putem metoda Create()) može da kreira TextDocument / DrawingDocument objekte.
Relativno je jednostavno zameniti delove ovakvog sistema (npr. zameniti objekte TextDocument objektima WordProcessorDocument ), kao i proširiti sistem (npr. dodavanje PaintDocument i PaintApplication klasa).
To je standard koji omogucava da proizvodi raznih proizvodaca medusobno sadraduju.
CORBA ima standarni API za vecinu funkcija ORB-a:
inicijizacija ORB-a, pozivanje metoda udaljenih objekata, prevodjenje tipova podataka iz jednog u drugi
programski jezik itd.
Objekti obavljaju komunikaciju preko Internet Inter-ORB protokola (IIOP) protokola.
Vecina velikih proizvodjaca podrzava CORBA-standard, osim Microsofta.
CORBA funkcionise tako sto kreira kopije udaljenih objekata
(tj. distribuirani objekat u lokalnom adresnom prostoru) koji se naziva stab (eng. stub- klada, odsecak).
CORBA je projektovana da radi sa velikim skupom programskih jezika (C, C++, ADA, Smalltalk, Java, ...)
i zbog toga nudi samo ogranicen skup osobina zajednicki svim jezicima.
RMI je ORB ugraden u JDK 1.1.
To je objektno orijentisana verzija RPC-a (Remote Procedure Call).
RMI stvara iluziju da se udaljeni objekti pozivaju lokalno
(ne moramo da brinemo o osnovnim mehanizmima kao sto su sockets i dr.)
RMI je namenjen samo programskom jeziku Java.
← Observer DP | Sledeća strana za kraj i zakljucak → |