» »

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. :)

Gandalfar ::

Jezik, framework?

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.

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 ::

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.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

"Dinamicna" sprememba razreda v C++

Oddelek: Programiranje
131924 (1316) Spura
»

Objektno programiranje Java

Oddelek: Programiranje
111378 (1236) Spartacus
»

Trpljenje živali pred smrtjo in kvaliteta mesa (strani: 1 2 )

Oddelek: Loža
677833 (6365) PacificBlue
»

[JAVA]Kako dostopati do privaten konstante podrazreda iz nadrazreda

Oddelek: Programiranje
71241 (1169) alexa-lol
»

[C++] for {}

Oddelek: Programiranje
291710 (1404) Gundolf

Več podobnih tem