2010-06-17 10 views

Odpowiedz

8

tylko dwa przykłady przychodzi do głowy:

Zobacz również:


Aktualizacja: odpowiedzieć (obecnie usunięty?) Komentarz PeterMmm (która zapytała, jak wiedziałem, że była to pojedyncza), sprawdź javadoc i kod źródłowy:

public class Runtime { 
    private static Runtime currentRuntime = new Runtime(); 

    /** 
    * Returns the runtime object associated with the current Java application. 
    * Most of the methods of class <code>Runtime</code> are instance 
    * methods and must be invoked with respect to the current runtime object. 
    * 
    * @return the <code>Runtime</code> object associated with the current 
    *   Java application. 
    */ 
    public static Runtime getRuntime() { 
     return currentRuntime; 
    } 

    /** Don't let anyone else instantiate this class */ 
    private Runtime() {} 

powraca to samo wystąpienie za każdym razem i ma konstruktor private.

+1

Kilka z interfejsu Swing/AWT API. Singletons należy stosować ostrożnie. Dlatego nie ma tak wielu w całym Java API – Hardcoded

+1

Możesz mieć wiele obiektów 'Desktop' w tej samej maszynie wirtualnej. W apletach Sun/Oracle JRE z różnych serwisów będą występować różne "pulpity". 'Runtime' nie posiada żadnego stanu, więc przynajmniej nie jest użyteczny singleton (a zauważysz, że jego użycie jest bezcelowe). –

+0

@Tom: 'Pulpit' jest rzeczywiście bardziej multitonem. O 'Runtime', zastanawiałem się to samo ... Muszą mieć * coś * na myśli podczas projektowania go w ciemnych JDK 1.0 wieku. – BalusC

0

Należy pamiętać, że singletony powinny być używane z ostrożnością i refleksją. Rozważ argumenty przeciwko singletonom i swojej sytuacji przed wdrożeniem. Nadużywanie singletonów to anty-wzór - podobny do zmiennych globalnych.

Singleton Wiki Article

Java Dev on Singletons

Why Singletons are Evil

Używałem ich w przeszłość i zobaczyć pewne korzyści dla nich. Byłem także bardzo zirytowany, gdy próbowałem rozwijać testowo, ponieważ jest to jeden obszar, w którym są złe. Również dziedziczenie z nich powoduje pewne trudne do zrozumienia zachowanie - przynajmniej w Pythonie - nie wiem na pewno w Javie. Zasadniczo po prostu tego nie robisz. Tak jak na początku, wydaje mi się, że to świetny pomysł, a potem wpadasz w pułapki i dobrze sobie radzisz, może to wcale nie jest takie dobre.

0

To za Swing: SingleFrameApplication. Sprawdź, this presentation to cudownie opisuje, jak to działa.

+0

To nie jest singleton i nie jest częścią standardowego interfejsu API języka Java. – BalusC

+0

Dlaczego myślisz, że to nie jest singleton? – Xorty

+0

Jest to klasa abstrakcyjna i nie ma metody "getInstance()" lub podobnej, która zwraca * self *. Javadoc również nie mówi ani słowa/wskazówki na ten temat.Ta cała klasa bardziej przypomina statyczną fabrykę z dodatkami. – BalusC