|
| Ang. Factory Fra : Klaus Petersen |
Dato : 09-07-03 20:31 |
|
Hej ng.
Et lille struktur relateret spørgsmål.
Jeg har en factory, der skaber instanser af objekterne i mit system. Jeg vil
gerne noget tilsvarende en factory, der sørger for at nedlægge objekterne
igen.
Hvis det ikke er min factory, der skal gøre det, hvad er det så?
Klaus.
| |
Jakop Nielsen (09-07-2003)
| Kommentar Fra : Jakop Nielsen |
Dato : 09-07-03 20:40 |
|
> Jeg har en factory, der skaber instanser af objekterne i mit system. Jeg
vil
> gerne noget tilsvarende en factory, der sørger for at nedlægge objekterne
> igen.
>
> Hvis det ikke er min factory, der skal gøre det, hvad er det så?
Objekternes egne destructorer...? Har du behov for at holde styr på noget
særligt i forbindelse med nedlægning?
En factory bruger man jo for at ikke binde ens kode til konkrete klasser men
til interfaces.. så kan du ændre klassen, hvilket du sikkert udmærket ved,
men i den forbindelse hvad forhindrer så at du bare bruger alm destructor?
| |
Klaus Petersen (09-07-2003)
| Kommentar Fra : Klaus Petersen |
Dato : 09-07-03 20:50 |
|
> Objekternes egne destructorer...? Har du behov for at holde styr på noget
> særligt i forbindelse med nedlægning?
At alt bliver nedlagt. Da det er op til brugeren af systemet at skabe
objekterne, vil et vilkårligt antal objekter blive skabt.
Jeg vil gerne lade mit system tage ansvaret for at nedlægge objekterne for
at sikre, at alt bliver nedlagt.
> En factory bruger man jo for at ikke binde ens kode til konkrete klasser
men
> til interfaces..
Eller for at fritage brugeren af systemet for den komplicerede process i at
skabe det korrekt, hvilket er årsagen i mit tilfælde.
> så kan du ændre klassen, hvilket du sikkert udmærket ved,
> men i den forbindelse hvad forhindrer så at du bare bruger alm destructor?
Det vil jeg også gøre, men allerede nævnt, vil jeg gerne have systemet til
at styre nedlægningen, da den, som skabelsen, også er kompliceret.
Jeg er bare i tvivl om, hvorvidt min factory må, hvis det skal være
pricippelt korrekt, tage sig af den styring.
| |
Rasmus Christian Kaa~ (10-07-2003)
| Kommentar Fra : Rasmus Christian Kaa~ |
Dato : 10-07-03 07:27 |
|
> Det vil jeg også gøre, men allerede nævnt, vil jeg gerne have systemet til
> at styre nedlægningen, da den, som skabelsen, også er kompliceret.
Hvordan fortæller du dit eventuelle de-factory at du vil nedlægge instanser
i systemet?
| |
Klaus Petersen (10-07-2003)
| Kommentar Fra : Klaus Petersen |
Dato : 10-07-03 11:11 |
|
> Hvordan fortæller du dit eventuelle de-factory at du vil nedlægge
instanser
> i systemet?
Når brugeren kalder Destroy nedlægges hele systemet.
Men der vil også komme metoder i funktionslaget, der kan nedlægge enkelte
objekter i systemet.
Det skal egentlig lige siges, at det jeg laver er ikke en færdig applikation
med gui o.s.v., men et grafisk system, som en programmør kan integrere og
benytte sig af i sit vc++ projekt via. en lib og en header.
| |
Peer (09-07-2003)
| Kommentar Fra : Peer |
Dato : 09-07-03 23:06 |
|
"Klaus Petersen" <ng@spectual.ra.bnaa.dk> skrev i en meddelelse
news:behqhf$bbd$1@sunsite.dk...
> Hej ng.
>
> Et lille struktur relateret spørgsmål.
>
> Jeg har en factory, der skaber instanser af objekterne i mit system. Jeg
vil
> gerne noget tilsvarende en factory, der sørger for at nedlægge objekterne
> igen.
>
> Hvis det ikke er min factory, der skal gøre det, hvad er det så?
Du kunne eksempelvis anvende smart-pointers...
Tit er factory en singleton, og jeg formoder der er en stribe adaptors bag
ved din factory... - og du vil isolere skjule en kompleks skabelse af
objekter!?
| |
Klaus Petersen (10-07-2003)
| Kommentar Fra : Klaus Petersen |
Dato : 10-07-03 10:54 |
|
> Du kunne eksempelvis anvende smart-pointers...
Hvad er det nu lige det er...?
> Tit er factory en singleton, og jeg formoder der er en stribe adaptors bag
> ved din factory... - og du vil isolere skjule en kompleks skabelse af
> objekter!?
Ja - jeg vil simplificere brugerens rolle i skabelsen af system ved at han
kan skabe det hele ved et kald til Instance () på min factory.
Tilsvarende vil jeg lave en Destroy (), der nedlægger alle objekter i system
i den rigtige rækkefølge.
For det kan lade sig gøre, btw, skal mit funktionslag lade min factory skabe
objekterne den skal bruge, som så registrerer dem og deres rækkefølge.
| |
Jakop Nielsen (10-07-2003)
| Kommentar Fra : Jakop Nielsen |
Dato : 10-07-03 12:17 |
|
> > Du kunne eksempelvis anvende smart-pointers...
> Hvad er det nu lige det er...?
auto_ptr er en template pointerklasse som frigiver pointer-data når den går
ud af scope. Det kan ofte forhindre leaks, da man ikke glemmer en pointer og
ikke kan delete mem bagefter.
Sådan som du har beskrevet dit system nu, så tror jeg nu ikke det er hvad du
har brug for. Du har jo tilsyneladende også allerede løsningen på dit
problem hvis du lader din factory slette dine objekter. Om det så helt
præcis kan betegnes som et factory pattern, synes jeg du skal springe op og
falde ned af igen (eller noget i den stil) for løsningen er lige elegant
uanset.
Personligt synes jeg det giver fin mening at factory sørgrer for
nedlægningen af dine objekter, når det er vigtigt hvilken rækkefølge de
slettes i, og factory i forvejen er den eneste der ved hvad der er skabt og
i hvilken rækkefølge.
| |
klaus (10-07-2003)
| Kommentar Fra : klaus |
Dato : 10-07-03 12:52 |
|
"Klaus Petersen" <ng@spectual.ra.bnaa.dk> wrote in message
news:bejd3h$vg$1@sunsite.dk...
> > Du kunne eksempelvis anvende smart-pointers...
>
> Hvad er det nu lige det er...?
>
Her er lidt om hvad smart pointers er for noget - det er en hel del mere end
std:auto_ptr
http://boost.org/libs/smart_ptr/smart_ptr.htm
/Klaus
| |
Peer Jensen (11-07-2003)
| Kommentar Fra : Peer Jensen |
Dato : 11-07-03 19:33 |
|
"Klaus Petersen" <ng@spectual.ra.bnaa.dk> skrev i en meddelelse
news:bejd3h$vg$1@sunsite.dk...
> > Du kunne eksempelvis anvende smart-pointers...
> Hvad er det nu lige det er...?
Populært: Pointere der kan slettet sig selv (der er givet en udemærket
forklaring)
> > Tit er factory en singleton, og jeg formoder der er en stribe adaptors
bag
> > ved din factory... - og du vil isolere skjule en kompleks skabelse af
> > objekter!?
>
> Ja - jeg vil simplificere brugerens rolle i skabelsen af system ved at han
> kan skabe det hele ved et kald til Instance () på min factory.
>
> Tilsvarende vil jeg lave en Destroy (), der nedlægger alle objekter i
system
> i den rigtige rækkefølge.
>
> For det kan lade sig gøre, btw, skal mit funktionslag lade min factory
skabe
> objekterne den skal bruge, som så registrerer dem og deres rækkefølge.
Tjae, lave en liste af typeløse pointere (pointere til adaptore) og og slet
dem vha. Destroy() eller hvad jeg vil foretrække: den normale destructor til
din factory
Jeg mindes at have set en udemærket implementering af Factory-mønstret på
www.codeguru.com... - prøv at kigge der hvis du mangler inspiration.
--
Mvh
Peer
It's not a bug... - it's a feature (Citat: M$)
| |
|
|