Avatar billede Slettet bruger
07. november 2003 - 00:11 Der er 4 kommentarer og
2 løsninger

Singletom vs. statiske metoder/variabler

Hej eksperter!

Jeg sidder og kigger lidt på http://www.eksperten.dk/spm/301728 og jeg kan forstå, at man ved at vælge at implementere en singleton frem for at anvende statiske metoder og variabler er at man obnår mindre kobling mellem klasserne i sit program.

Jeg ville bare spørge, om nogen kunne uddybe dette for mig? Hvad er "kobling" mellem klasser?

Andre tips til hvad, der taler for at anvende singleton frem for statiske metoder har også høj interesse.

På forhånd tak.
Avatar billede arne_v Ekspert
07. november 2003 - 06:53 #1
Fordelene ved singlton er bl.a.:
- objektorienteret ikke proceduralt
- mulighed for at have en constructor
- mulighed for at bruge extend og abstrakte metoder

Men jeg tror faktisk at den første pind er den vigtigste.
Avatar billede arne_v Ekspert
07. november 2003 - 06:55 #2
Tæt kobling mellem klasser betyder at de afhænger for meget af hinanden.
Således at en ændring i en med for stor sandsynelighed vil kræve ændringer
i de andre.

Umiddelbart vil jeg sige at det argument kun kan bruges mod static public
members ikke mod public static methods som bruger private static members.
Avatar billede aslan Nybegynder
07. november 2003 - 12:47 #3
Når jeg laver en klasse til singleton er det fordi jeg ved at der kun skal oprettes en objekt af den. Så får jeg den fordel at ikke behøver at tage objektet med rundt på forskellige klasser for at bruge den men bare kan kalde den med ved at sige MinKlasse k = MinKlasse.getInstance();

Andre steder en singleton vil være en fordel er når du arbejder med en database. De fleste databaser kan kun klare en vis antal forbindelser og her ville det være en fordel at genbruge forbindelsen og sikre sig at uvidende udviklere ikke komme til at oprette for mange forbindelser til db.
Avatar billede Slettet bruger
08. november 2003 - 00:09 #4
aslan: Jeg er meget glad for at du vil hjælpe, det må du endelig ikke tro. Men hvis jeg har læst dit svar korrekt, så forklarer du mere hvad en singleton er i sig selv, og ikke så meget forskellen mellem statiske metoder/variabler og dette designmønster.

Jeg er nysgerrig: hvis du implementerer en klasse som en singleton, og i den samme klasse implementerer en statisk metode "getInstance()" (Såddan læser jeg dit svar)... "Ofrer" man så ikke lidt af den fordel man angiveligt opnår ved at anvede singleton. Jeg mener på denne måde anvender man jo begge ting. (Det er muligt at jeg misforstår eller blander tingene sammen).

Men jeg tror under alle omstændigheder jeg er blevet klogere: Det handler om at skabe uafhængihed mellem klasserne ved at anvende en mere objektorienteret løsning mere end det handler om ting som performance hvis jeg har forstået rigtigt. Jeg takker jer begge for hjælpen.
Avatar billede arne_v Ekspert
08. november 2003 - 09:20 #5
Du skal altid have en statisk metode getInstance i et singleton pattern.

Der er mangge OO patterns som bruger statiske metoder, så det er der
ikke noget galt i.
Avatar billede jakoba Nybegynder
09. november 2003 - 19:40 #6
en singleton er en specialsituation. Hvor der kun er een.
Hvis du fx har 2 printer på dit netværk hunne du lave en doubleton der holder rede i hvem der 'ejer' hvilken printer i øjeblikket. osv.

en anden fordel med singleton fremfor rent statisk er at en singleton bliver instantieret of kan indeholde metoder, samt sekundære objekter og data der IKKE er statiske, men dog stadig begrænsede til at overholde de regler du har bygget ind i din singleton.

mvh JakobA
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester