Avatar billede eskeeske Nybegynder
30. juni 2003 - 15:32 Der er 7 kommentarer og
3 løsninger

Design Pattern Spørsmål

Hvad kalder man det hvis man har en Klasse f.eks. en som hedder WebPage

Og så kan man skrive

WebPage.getPageByID(int id) (statisk metode)

Og så inde i WebPage ligger der en Private Static ArrayList hvor alle sider ligger (og hvis getPageByID bliver kaldt med en med en id som ikke ligger i ArrayList bliver den skabt og lagt der).

Jeg synes det hedder lidt en singleton, men er det ikke hvis der kun ligger et element.

p.s. Jeg koder i C# så muligvis findes ArrayList ikke i Java.

Tak Hvis nogen kan hjælpe.
Avatar billede hojgaard Nybegynder
30. juni 2003 - 15:36 #1
Nope... det er ikke en singleton.

Med en singleton sikrer du dig, at der kun kan oprettes 1 instans af en klasse.
Det du gør i dit eksempel, er at tilgå en statisk metode - ikke det samme.
Avatar billede arne_v Ekspert
30. juni 2003 - 15:52 #2
ArrayList findes i Java.

En statisk metode som henter/opdaterer statiske members kan bruges
på samme måde som en singleton men er ikke en singleton.

Der kan kun være en forekomst af data (vi ser lige bort fra multiple
classloaders problematikken - den rammer også ægte singleton).

Men det er ikke så pænt objekt orienteret.

Og du kan komme i store problemer i forbindelse med mere komplekse
strukturer, når du skal initialisere dem. Med statiske members
kontrollerer du ikke selv rækkefølgen af initialiseringer. Det gør du med
singleton.
Avatar billede eskeeske Nybegynder
30. juni 2003 - 15:53 #3
Men det er jo lidt det samme jeg gør, jeg sikrer mig jo at der kun oprettes n instanser af en klasse, og ikke to instanser med samme id.

Så hvad hedder det?
Avatar billede arne_v Ekspert
30. juni 2003 - 15:58 #4
Du kører slet ikke på instanser. Men på klasser.

Det er ikke singleton pattern.

Jeg ved ikke om det hedder noget specielt.

"brug af statiske metoder/members"

Onde tunger vil kalde det "programmere C i C++/C#/Java".
Avatar billede eskeeske Nybegynder
30. juni 2003 - 16:06 #5
Jeg forstår ikke hvad du/i mener, min metode i eksemplet

WebPage.getPageByID(int id)

Retunerere da en instans af Klassen WebPage.

Det er da præcis det samme som hvis jeg havde haft en singleton som hed WebPage og som havde en metode som hed WebPage.getPage().

?
Avatar billede eskeeske Nybegynder
30. juni 2003 - 16:07 #6
Jeg ved godt at det ikke er en Singleton, men spørger jo netop hvad det så hedder. Fordi det ligner jo lidt ideen bag en singleton.
Avatar billede arne_v Ekspert
30. juni 2003 - 16:18 #7
Nej.

For det første har du blandet to klasser samen i en klasse.

Reelt har du nemlig to klasser:

WebPage som er et objekt jeg formoder repræsenterer en web side

WebPageList som indeholder en liste af kendte web sider

[du har så merget WebPageList ind i WebPage, men jeg vil omtale den
som WebPageList i det efterfølgende for klarhed]

WebPageList kan laves som singleton med:
  private non-static ArrayList member
  private static WebPageList instance
  private constructor
  public static WebPageList getInstance metode
  public non-static get & add metoder

eller som du har lavet med:
  private static ArrayList member
  no constructor
  public static get & add metoder

De kan bruges stort set ens.

Du skriver:

WebPageList.get(123)

Med singleton ville du skrive:

WebPageList.getInstance().get(123)

Men singleton har nogle klare fordele:
  - du har en constrctor og kan derfor initialisere members i en
    bestemt rækkefølge
  - du kan implementere interfaces
  etc.etc.
Avatar billede arne_v Ekspert
30. juni 2003 - 16:20 #8
Du har ganske ret i at de 2 konstruktioner grundliggende løser
samme problem.

Singleton er bare en mere objekt-orienetret måde at løse
problemet på.

Og i mere komplekse problem-stillinger giver det også kode
mæssige fordele.
Avatar billede walker Nybegynder
05. juli 2003 - 12:24 #9
Hej. Har netop for kort tid siden studeret lidt omkring GoF og GRASP mønstre, men er ikke stødt på det omtalte mønster, så jeg tror ikke det hedder specielt i den form.
Avatar billede arne_v Ekspert
05. juli 2003 - 21:54 #10
Brug af static data og static metoder ville nok også snarere ryge i en
anti-pattern bog end i en pattern-bog.
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