algorytm.org

Singleton (singleton)

Pomoc
Potrzebujesz algorytmu/kodu źródłowego, którego nie znalazłeś(aś) w serwisie?
Zamów algorytm!
Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Singleton (singleton)
Ocena użytkowników:***** / 11
SłabyŚwietny 
Wpisany przez Kamil Dworak, 01 września 2010 20:03

Singleton to konstrukcyjny wzorzec projektowy. Wyobraź sobie, że w naszym programie potrzebujemy obiektu, który będzie zainicjowany tylko jeden raz. Tak, ograniczamy się tylko do pojedynczej instancji dla danej klasy. Ale po co komu w ogóle taki obiekt? Załóżmy, że będzie on zawierał w sobie bardzo ważne informacje, może zawierać jakieś statystyki bądź ważne ustawienia. Ponowna inicjalizacja mogłaby spowodować przekłamanie oraz nieumyślną zmianę zapisanych ustawień. Otrzymane wyniki będą niespójne. Kolejnym przykładem zastosowania singletona jest oszczędność pamięci przez programistę. Sam użytkownik nawet nie wie, czy owa instancja już istnieje, czy też nie. W programach wielowątkowych istnieje pewne ryzyko błędu, spowodowanego stosowaniem wzorca. Może dojść do sytuacji, że dwa wątki, w tym samym czasie będą chciały zainicjować obiekt, w skutek czego powstają nam dwa singletony w systemie.

Schemat wzorca:

singleton - przykład


  • Tworzymy tablicę obiektów klasy MenedzerPlikow
  • Inicjujemy 1 element tablicy tab[0] (wywołujemy metodę dawaj Menedzer).
  • Klasa zawiera statyczne pole instancja, wspólne dla wszystkich obiektów, początkowo posiada ono wartość NULL.
  • W metodzie dawajMenedzer dokonujemy sprawdzenia, czy pole instancja posiada już jakąś wartość, jeżeli nie, odpalamy prywatny konstruktor i zwracamy nasza instancje do programu głównego. Po drodze wygenerowaliśmy identyfikator obiektu.
  • Pora na kolejny element tablicy tab[1].
  • Pole instancja, jak napisałem wyżej, jest wspólne dla wszystkich obiektów klasy, więc jest już ono zainicjowane. Nie generujemy już po raz kolejny identyfikatora, ani nie używamy konstruktora, natomiast informujemy użytkownika o tym, że dany obiekt został już wcześniej zainicjowany. Zwracamy istniejącą instancję.
  • Tak samo postępujemy z elementem





Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Kamil DworakC#Visual Studio 2008
.cs
.cs
***** / 4
Kamil DworakJava
.java
.java
***** / 8
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język
programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie

Poprawiony: 01 września 2010 20:13
Komentarze
photo
-10 # Arek 2010-10-21 16:11
Jeśli stosowana jest notacja UML, to nazwa metody "dawajMenedzer" powinna być podkreślona. W przeciwnym wypadku oznacza metodę instancji a nie klasy. A skoro oznacza metodę instancji to należaloby stworzyć jakoś tą instancje ergo negujemy ideę sigletona.
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz