30. juni 2003 - 15:32Der 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.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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.
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.
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.
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.
Brug af static data og static metoder ville nok også snarere ryge i en anti-pattern bog end i en pattern-bog.
Synes godt om
Ny brugerNybegynder
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.