StartWzorce projektoweSingleton (singleton)
Baza Wiedzy
Wersja offline serwisu przeznaczona na urządzenia z systemem Android.

Darowizny
darowiznaWspomóż rozwój serwisu


Nagłówki RSS
Kanał artykuły
Kanał implementacje
Kanał komentarze
Kanał forum


Bookmarki









Sonda
Implementacji w jakim języku programowania poszukujesz?
 
Singleton (singleton)
Ocena użytkowników:++++- / 2
SłabyŚwietny 
Wpisany przez Kamil Dworak
środa, 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





Autor Język programowania Komentarz Otwórz Pobierz Ocena
Kamil Dworak C# Visual Studio 2008
Implementacja w C#
Implementacja w C#
++++- / 2
Kamil Dworak Java
Implementacja w Java
Implementacja w Java
+++-- / 2
 
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: środa, 01 września 2010 20:13

Komentarze

 
photo
0 # 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

Kod antysapmowy
Odśwież