/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Factory?
Fra : JS


Dato : 10-05-05 17:35

Jeg har læst lidt om nogle forskellige Design Patterns og ind imellem bliver
begrebet "Factory" nævnt. Hvad dækker dette over? Er det også et design
Pattern eller er det en slags Data struktur?

Mvh
JS



 
 
Martin Rytter (10-05-2005)
Kommentar
Fra : Martin Rytter


Dato : 10-05-05 18:03

JS wrote:
> Jeg har læst lidt om nogle forskellige Design Patterns og ind imellem bliver
> begrebet "Factory" nævnt. Hvad dækker dette over? Er det også et design
> Pattern eller er det en slags Data struktur?

Factory er et designmønster til at instiantiere ting med en
createSomething() metode.

Det kan eksempelvis bruges til at lave en opdeling mellem interface og
implementering.

Man kunne definere to interfaces:

interface Foo() { void bar(); }
interface FooFactory() { Foo createFoo(); }

Og derpå lave en særlig implementering haraf:

class SomeSpecialFoo() implements Foo {
void bar() {
// do something very special
}
}

class MyFooFactory implements FooFactory {
public Foo createFoo() {
return new SomeSpecialFoo();
}
}

For brugeren af FooFactory og Foo er det gemt af vejen hvordan en Foo
bliver lavet. Han skal ikke selve lave et objekt med 'new' men bruger i
stedet en factory til formålet.

Der er andre situationer hvor factory mønsteret er praktisk. GoF eller
lign. kan anbefales.

/mrj

--
Martin Rytter, martin at ryt dk, Odense, Denmark.

Michael Banzon (10-05-2005)
Kommentar
Fra : Michael Banzon


Dato : 10-05-05 18:19

Martin Rytter wrote:
> JS wrote:
> /mrj

Hehe... Jeg læste spørgsmålet, og vidste at det ville være dig der
svarede ;)

Skulle du ikke hellere lave noget andet?? :P

--
Michael Banzon
http://michael.banzon.dk/

Martin Rytter (10-05-2005)
Kommentar
Fra : Martin Rytter


Dato : 10-05-05 18:31

Michael Banzon wrote:
> Hehe... Jeg læste spørgsmålet, og vidste at det ville være dig der
> svarede ;)

Forslag?

--
Martin Rytter, martin at ryt dk, Odense, Denmark.

JS (10-05-2005)
Kommentar
Fra : JS


Dato : 10-05-05 20:30


"Martin Rytter" <martin@ryt.dk> skrev i en meddelelse
news:4280e8f5$0$79456$14726298@news.sunsite.dk...
> JS wrote:
> > Jeg har læst lidt om nogle forskellige Design Patterns og ind imellem
bliver
> > begrebet "Factory" nævnt. Hvad dækker dette over? Er det også et design
> > Pattern eller er det en slags Data struktur?
>
> Factory er et designmønster til at instiantiere ting med en
> createSomething() metode.
>
> Det kan eksempelvis bruges til at lave en opdeling mellem interface og
> implementering.
>
> Man kunne definere to interfaces:
>
> interface Foo() { void bar(); }
> interface FooFactory() { Foo createFoo(); }
>
> Og derpå lave en særlig implementering haraf:
>
> class SomeSpecialFoo() implements Foo {
> void bar() {
> // do something very special
> }
> }
>
> class MyFooFactory implements FooFactory {
> public Foo createFoo() {
> return new SomeSpecialFoo();
> }
> }
>
> For brugeren af FooFactory og Foo er det gemt af vejen hvordan en Foo
> bliver lavet. Han skal ikke selve lave et objekt med 'new' men bruger i
> stedet en factory til formålet.
>
> Der er andre situationer hvor factory mønsteret er praktisk. GoF eller
> lign. kan anbefales.


Ok er der nogen forskel på Abstract Factory og Factory Method eller er det 2
navne for det samme? Overvejer at bruge det i forbindelse med at tilgå en
MySQL database JDBC.



Martin Rytter (10-05-2005)
Kommentar
Fra : Martin Rytter


Dato : 10-05-05 20:47

Hej

JS wrote:
> Ok er der nogen forskel på Abstract Factory og Factory Method eller er det 2
> navne for det samme? Overvejer at bruge det i forbindelse med at tilgå en
> MySQL database JDBC.

Jeg kan ikke på stående fod huske forskel. Men pointen med de to mønstre
er omtrendt den samme. Og de ligner hinanden ret meget. Det er vist i
øvrigt også sådan noget folk aldrig kan blive helt enige om. Det
vigtigste er imidlertidigt om det mønster du vælger løser dit problem :)

I forbindelse med at tilgå en db kan det ofte med fordel bruges. Især
hvis du har forskellige typer persistens. Ex:

Generel definition:

interface MyDomObjA { .. }
interface MyDomObjB { .. }
interface MyDomainObjectFactory {
MyDomObjA createA();
MyDomObjB createB();
}

Så kan du have:
class JDBCDomFactory implements MyDomainObjectFactory { .. }
og
class XMLDomFactory implements MyDomainObjectFactory { .. }

Nu ved jeg ikke præcist hvad dit problem er. Men typisk ønsker du ikke
bare at hente data ud, men også at kunne skrive dem tilbage. Det skal du
også lige have en plan for.

Håber det giver mening :)

--
Martin Rytter, martin at ryt dk, Odense, Denmark.

Brian (10-05-2005)
Kommentar
Fra : Brian


Dato : 10-05-05 21:07


"Martin Rytter" <martin@ryt.dk> wrote in message
news:42810f79$0$79456$14726298@news.sunsite.dk...
> Hej
>
> JS wrote:
>> Ok er der nogen forskel på Abstract Factory og Factory Method eller er
>> det 2
>> navne for det samme? Overvejer at bruge det i forbindelse med at tilgå en
>> MySQL database JDBC.
>
> Jeg kan ikke på stående fod huske forskel. Men pointen med de to mønstre
> er omtrendt den samme. Og de ligner hinanden ret meget. Det er vist i
> øvrigt også sådan noget folk aldrig kan blive helt enige om. Det vigtigste
> er imidlertidigt om det mønster du vælger løser dit problem :)
>
> I forbindelse med at tilgå en db kan det ofte med fordel bruges. Især hvis
> du har forskellige typer persistens. Ex:
>
> Generel definition:
>
> interface MyDomObjA { .. }
> interface MyDomObjB { .. }
> interface MyDomainObjectFactory {
> MyDomObjA createA();
> MyDomObjB createB();
> }
>
> Så kan du have:
> class JDBCDomFactory implements MyDomainObjectFactory { .. }
> og
> class XMLDomFactory implements MyDomainObjectFactory { .. }
>
> Nu ved jeg ikke præcist hvad dit problem er. Men typisk ønsker du ikke
> bare at hente data ud, men også at kunne skrive dem tilbage. Det skal du
> også lige have en plan for.
>
> Håber det giver mening :)
>
> --
> Martin Rytter, martin at ryt dk, Odense, Denmark.
Prøv eventuelt at søge på Google efter Factory og abstract factory og
factory. Jeg vil nu nærmere sige at acstract factory nærmest er
implementeret via factory - men Martin har sikkker ret i at der findes
forskellige opfattelser. Men da det er et af de 23 GoF mønstre er der mange
informationer at finde rundt omkring på nettet. Husk at motivations
eksemplerne kun er til for at hvis princippet i mønstret, og at et mønster
dermed ikke kun har en virkemåder - man kan jo med fordel kombinere flere
mønstre.

Brian



Michael Rasmussen (10-05-2005)
Kommentar
Fra : Michael Rasmussen


Dato : 10-05-05 21:15

On Tue, 10 May 2005 21:46:58 +0200, Martin Rytter wrote:

>
> Jeg kan ikke på stående fod huske forskel. Men pointen med de to
> mønstre er omtrendt den samme. Og de ligner hinanden ret meget. Det er
> vist i øvrigt også sådan noget folk aldrig kan blive helt enige om. Det
> vigtigste er imidlertidigt om det mønster du vælger løser dit problem
> :)
>
Teoretisk set er der en hvis forskel. Ifølge Design Patterns - Elements
of Reusable Object-Oriented Software, er der to forskellige
anvendelsesområder for de to:
Abstract Factory
[..]
"Provide an interface for creating families of related or dependent
objects without specifying their concrete classes"
Eks. Skins til applikationer er et godt eksempel.
Factory
[..]
"Define an interface for creating an object, but let subclasses decide
which class to instantiate. Factory method lets a class defer
instantiation to subclasses"
Eks. Eksemplet med tilgang til et persistenslag hvor konstruktøren
erklæres virtuel.

--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917


Johnnie Hougaard Nie~ (10-05-2005)
Kommentar
Fra : Johnnie Hougaard Nie~


Dato : 10-05-05 21:01

JS wrote:
> Ok er der nogen forskel på Abstract Factory og Factory Method eller er det 2
> navne for det samme?

En abstract factory er en factory som fabrikerer factories. Sagt på en
anden måde, er det når en factory er defineret via interface/abstract,
og der derfor er en factory til at kunne instantiere en passende factory
afhængig af behovet.

/Johnnie

Henrik Nielsen (10-05-2005)
Kommentar
Fra : Henrik Nielsen


Dato : 10-05-05 21:01

JS wrote:
> Ok er der nogen forskel på Abstract Factory og Factory Method eller er det 2
> navne for det samme? Overvejer at bruge det i forbindelse med at tilgå en
> MySQL database JDBC.

Forskellen er, at med factory, så har du en bestemt type (klasse), hvor
du kan kalde en create et eller andet metode på.

Med abstract factory, så har du et interface med en create et eller
andet metode, hvor du så kan have forskellige implementationer.

Interfacet java.awt.Toolkit er et godt eksempel på en abstract factory,
hvor man er ligeglad med hvilken factory-implementation man benytter,
man ved bare at hvis man kalder createButton så får man en knap :)

Du kan læse meget mere om abstract factory her:
http://c2.com/cgi-bin/wiki?AbstractFactoryPattern

Og de har endda også en direkte sammenligning mellem de to:
http://c2.com/cgi-bin/wiki?AbstractFactoryVsFactoryMethod

Jeg håber det kastede lidt lys over sagerne :)

/henrik

Søg
Reklame
Statistik
Spørgsmål : 177438
Tips : 31962
Nyheder : 719565
Indlæg : 6408043
Brugere : 218879

Månedens bedste
Årets bedste
Sidste års bedste