Wpis z mikrobloga

Ktoś wie jak wygląda implementacja (w Javie) Singletona, tylko takiego, żeby dało radę stworzyć np. 3 obiekty? Hmm takie zadanie dał nam gościu na egzaminie i do teraz się zastanawiam jak je rozwiązać. W spojlerze implementacja Singletona pozwalającego stworzyć jeden obiekt


private static Singleton unikalnaInstancja;


private Singleton(){}


public static synchronized Singleton tworzenieInstancji(){


if(unikalnaInstancja=null){


unikalnaInstancja = new Singleton;


}


return unikalnaInstancja;


}


#programowanie #java #wzorceprojektowe #singleton
  • 31
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@plusiarz: To ja tylko dodam, że taki twór nazywa się multiton i rzeczywiście jest wykorzystywany, ale rzadko. Np. na anglojęzycznej wikipedii masz opis z przykładem implementacji.

W podanej tam Javowej implementacji oczywiści można sprawdzać, czy rozmiar mapy > 3. W dodatku lepiej zamiast typu Map użyć typ Hashtable, który ma wbudowane mechanizmy "thread-safe".
  • Odpowiedz
@lerner: jestem niemal pewny, że to nie działa. Spróbuj sobie w mainie zrobić System.out.println(s1) itd, będą nulle.

W Javie obiekty przekazywane są przez kopię referencji, nie przez referencję.

To raz. Dwa, to to, że w Singletonie o to chodzi, że wywołujesz metodę statyczną Singleton.getInstance() i dostajesz instancję, zawsze. Twoja wersja, to kod, który pozwala stworzyć 3 obiekty i nara, już więcej się do nich nie
  • Odpowiedz
jestem niemal pewny, że to nie działa. Spróbuj sobie w mainie zrobić System.out.println(s1) itd, będą nulle.


W Javie obiekty przekazywane są przez kopię referencji, nie przez referencję.

To raz. Dwa, to to, że w Singletonie o to chodzi, że wywołujesz metodę statyczną Singleton.getInstance() i dostajesz instancję, zawsze. Twoja wersja, to kod, który pozwala stworzyć 3 obiekty i nara, już więcej się do nich nie dostaniesz.


@012345678: masz racje, przyzwyczajenia z
  • Odpowiedz
@lerner: https://ideone.com/6NQJ1o sprawdziłem, jest kupa tak jak mówiłem ;-).

I bardzo dobrze, zwracanie wyniku działania metody przez jej parametr to jakiś chory pomysł :P (no offence cpp).

W 90% przypadkach starczy zwracanie przez return (tutaj wystarczyłoby, że robisz return instancja, bez parametru i nie void tylko Singleton, zamiast tych "referencji"). Czytelniej, lepiej i nie dzieje się
  • Odpowiedz