algorytm.org

Implementacja w Java

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) - Implementacja w Java
Ocena użytkownikóww: *****  / 8
SłabyŚwietny
Nadesłany przez Kamil Dworak, 01 września 2010 22:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

Singleton.java:
/****************************************
* Wzorzec Projektowy Singleton          *
* www.algorytm.org						*
* Opracowal Dworak Kamil 				*
*****************************************/

class MenedzerPlikow {
	private static MenedzerPlikow instancja = null;
	private int identyfikator;
	
	private MenedzerPlikow(){
		identyfikator = (int)((Math.random()*10)%10);
	}
	
	//-------------------------------------------------------------------------------------------#1 sposob
	public static synchronized MenedzerPlikow dawajMenedzer(){
		if(instancja == null){
			instancja = new MenedzerPlikow();
			return instancja;
		}
		System.out.println("Menedzer juz zostal wczesniej utworzony!");
		return instancja;
	}
	
	public void about(){
		System.out.println("Identyfiaktor = " + identyfikator);
	}
	
	/*-------------------------------------------------------------------------------------------#2 sposob
	    // nie inicjujemy tutan nullem, instancja juz od poczatku posiada wartosc
	  
	  	private final static MenedzerPlikow instancja = new MenedzerPlikow();
	  	public static MenedzerPlikow dawajMenedzer(){
				return instancja;
			}
	 */
	
	/*------------------------------------------------------------#3 sposob - metoda podwojnego blokowania

		private static volatile MenedzerPlikow instancja=null;
		public static MenedzerPlikow dawajMenedzer(){
			if(instancja == null){
				synchronized (MenedzerPlikow.class){
					instancja = new MenedzerPlikow();
				}
			}
			return instancja;
		}
	*/
	
}

public class Singleton {
	public static void main(String[]args){
		MenedzerPlikow[] tab = new MenedzerPlikow[3];
		tab[0] = MenedzerPlikow.dawajMenedzer();
		tab[1] = MenedzerPlikow.dawajMenedzer();
		tab[2] = MenedzerPlikow.dawajMenedzer();
		
		for(MenedzerPlikow object : tab)
			object.about();
	}
}
Komentarze
photo
-5 # 8143 2014-06-14 16:18
Przykład singletona prawie dobry. Zapomniałeś dać "else"
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+4 # majkelo 2014-08-12 01:56
nie wydaje mi sie, by else było tu gdziekolwiek potrzebne (wczesniej w ifie była instrukacja return) ;)
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # Amadeuszx 2014-10-30 14:44
A gdzie brak Ci tego else?
W wersji 1? - tam "return instancja;" powoduje, że i tak linijka System.out nie zaistnieje
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # matrix-1990@wp.pl 2016-01-26 20:14
będę czepliwy :)

singleton lepiej implementować instancję w obrębie enuma, a nie klasy. Enum zapewni ci, że nie będzie można utworzyć więcej niż jedną instancję obiektu, w przypadku klasy i mechanizmu refleksji istnieje możliwość zmiany modyfikatora dla instancji na public i nadpisywania instancji
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz