Forum » Programiranje » ClassFactory
ClassFactory
abyssus ::
Zanima me, če bi mi kdo lahko razložil, kaj je namen classFactory? Googlam trenutno nekaj o tem pa mi še vedno ni najbolj jasno, zato bi bila slovenska razlaga dobrodošla. Hvala. :)
nightrage ::
Če mene vprašaš je to eden od načrtovalskih vzorcev, vendar samo ugibam. Factory method pattern @ Wikipedia
kuall ::
če imaš abstraktni razred (ali interace)
in več implementacij za njega
potem uporabiš factory
da ti vrne eno od implementacij.
primer:
abstraktni razred zival
abstraktna procedura reciNekaj ()
end razred
konkretni razred krava implementira zival
konkretna procedura reciNekaj ()
reci ("MU")
end procedura
konkretni razred pes implementira zival
konkretna procedura reciNekaj ()
reci ("HOV")
end procedura
factory zival ustvariKonkretnoZival (string imeZivali)
if imeZivali = "krava" then
return nov krava ()
elseif imeZivali = "pes" then
return nov pes ()
end if
end factory
potem pa takole uporabljas tole:
userInput = "vpisi pes ali krava"
zival zival1 = ustvariKonkretnoZival (userInput)
zival1.reciNekaj()
ce bo vpisal "pes" bo zival1 rekla "HOV", ce bo vpisal "krava" bo zival1 rekla "MU".
v bistvu factory uporabiš takrat ko veš, da boš ustvaril enega od implementacij abstraktnega razreda, ne veš pa katero točno, kot je v mojem primeru zgoraj.
lahko si pogledaš še "High Performance Factory" tukaj:
http://www.matlus.com/high-performance-...
prednost te high performance facotry je preprosto ta, da se tu factory napise samo enkrat in ga ni treba nikoli vec spreminjat, tudi ce nekdo drug doda svoje dodatne implementacije (macko, kuro, itd...) in se ne spozna na factory mehanizem recimo. deluje tako, da factory ko ustvarja prebere vse implementacije razreda iz spomina (baje se za vsak razred shrani v spominu programa njegovo ime, vse njegove metode, njegove nad- in pod- razrede. strukturo in vsega možnega boga. ne bi si mislil) in potem tale high performance factory uporablja ta info. torej ko dodaš neko svojo implementacijo se to avtomatično shrani v spomin programa! in factory lahko ko program laufa bere ta info o vseh implementacijah razreda iz spomina programa.
ne prevec uporabna stvar. ne boš rabil velikokrat. brezeve komplicira jezik. bi se dalo isto stvar doseci z nekim svojim algoritmom in neko referenco do razredov.
in več implementacij za njega
potem uporabiš factory
da ti vrne eno od implementacij.
primer:
abstraktni razred zival
abstraktna procedura reciNekaj ()
end razred
konkretni razred krava implementira zival
konkretna procedura reciNekaj ()
reci ("MU")
end procedura
konkretni razred pes implementira zival
konkretna procedura reciNekaj ()
reci ("HOV")
end procedura
factory zival ustvariKonkretnoZival (string imeZivali)
if imeZivali = "krava" then
return nov krava ()
elseif imeZivali = "pes" then
return nov pes ()
end if
end factory
potem pa takole uporabljas tole:
userInput = "vpisi pes ali krava"
zival zival1 = ustvariKonkretnoZival (userInput)
zival1.reciNekaj()
ce bo vpisal "pes" bo zival1 rekla "HOV", ce bo vpisal "krava" bo zival1 rekla "MU".
v bistvu factory uporabiš takrat ko veš, da boš ustvaril enega od implementacij abstraktnega razreda, ne veš pa katero točno, kot je v mojem primeru zgoraj.
lahko si pogledaš še "High Performance Factory" tukaj:
http://www.matlus.com/high-performance-...
prednost te high performance facotry je preprosto ta, da se tu factory napise samo enkrat in ga ni treba nikoli vec spreminjat, tudi ce nekdo drug doda svoje dodatne implementacije (macko, kuro, itd...) in se ne spozna na factory mehanizem recimo. deluje tako, da factory ko ustvarja prebere vse implementacije razreda iz spomina (baje se za vsak razred shrani v spominu programa njegovo ime, vse njegove metode, njegove nad- in pod- razrede. strukturo in vsega možnega boga. ne bi si mislil) in potem tale high performance factory uporablja ta info. torej ko dodaš neko svojo implementacijo se to avtomatično shrani v spomin programa! in factory lahko ko program laufa bere ta info o vseh implementacijah razreda iz spomina programa.
ne prevec uporabna stvar. ne boš rabil velikokrat. brezeve komplicira jezik. bi se dalo isto stvar doseci z nekim svojim algoritmom in neko referenco do razredov.
Zgodovina sprememb…
- spremenilo: kuall ()
abyssus ::
@Gandalfar, PHP, ZF2.
@kuall, hvala za razlago, je sedaj razumljivo vendar res ne vem, kje bi to izpadlo uporabno. Nisem še na takšen primer naletel. Se pa zaj učim Zend Framework in je tam veliko tega in sem se pač hotel pozanimati, kako je s tem. Hvala!
@kuall, hvala za razlago, je sedaj razumljivo vendar res ne vem, kje bi to izpadlo uporabno. Nisem še na takšen primer naletel. Se pa zaj učim Zend Framework in je tam veliko tega in sem se pač hotel pozanimati, kako je s tem. Hvala!
kuall ::
Uporabno je večinoma takrat, ko pišeš kakšno knjižnico, za katero hočeš, da jo uporabniki lahko razširjajo. Da lahko dodajajo svoje implementacije razreda, ne da bi jim bilo treba spreminjati ostalo kodo knjižnice.
Če pišeš konkretno kodo, ki bo uporabljena samo v enem programu, je redko koristno. Se da namesto tega napisati kakšen svoj algoritem, ki ga boš bolje razumel. Koristno je takrat, ko pišeš nek abstraktni razred, za katerega še ne veš, kakšne vse implementacije bo lahko imel v prihodnosti. Ideja je, da bi v prihodnosti lahko samo dodal novo implementacijo in vsa ostala koda (knjižnica in koda, ki uporablja knjižnico) bi morala delovat brez sprememb.
Če pišeš konkretno kodo, ki bo uporabljena samo v enem programu, je redko koristno. Se da namesto tega napisati kakšen svoj algoritem, ki ga boš bolje razumel. Koristno je takrat, ko pišeš nek abstraktni razred, za katerega še ne veš, kakšne vse implementacije bo lahko imel v prihodnosti. Ideja je, da bi v prihodnosti lahko samo dodal novo implementacijo in vsa ostala koda (knjižnica in koda, ki uporablja knjižnico) bi morala delovat brez sprememb.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | "Dinamicna" sprememba razreda v C++Oddelek: Programiranje | 1935 (1327) | Spura |
» | Objektno programiranje JavaOddelek: Programiranje | 1392 (1250) | Spartacus |
» | Trpljenje živali pred smrtjo in kvaliteta mesa (strani: 1 2 )Oddelek: Loža | 7885 (6417) | PacificBlue |
» | [JAVA]Kako dostopati do privaten konstante podrazreda iz nadrazredaOddelek: Programiranje | 1252 (1180) | alexa-lol |
» | [C++] for {}Oddelek: Programiranje | 1721 (1415) | Gundolf |