2012-10-07 10 views
5

Powiel możliwe:
Difference between static class and singleton pattern?Singleton v/s klasy ze statycznymi członkami i metod w Javie

Dlaczego nikt nigdy wymagać jedną i tylko jedną instancję? Ten sam cel można osiągnąć za pomocą klas ze statycznymi zmiennymi składowymi i metodami statycznymi.

O ile mogę się dowiedzieć, nie może być dwóch możliwych odpowiedzi na to -

  1. Gdy klasa musi mieć stan i chcesz tylko jeden obiekt tego. Z punktu widzenia projektowania, klasa z metodami statycznymi & zmienne są uważane za klasy użytkowe i nie powinny utrzymywać żadnego stanu.

  2. Jeśli twoja klasa musi brać udział w polimorfizmie i chcesz tylko jeden obiekt klasy (klas), które są w drzewie dziedziczenia.

Byłoby bardzo pomocne, jeśli ktoś może podać przykład od scenariusza prawdziwym życiu lub z dowolnego Java API gdzie obiekty Singleton potrzebę uczestniczenia w polimorfizmu/dziedziczenia?

+0

Połączenie z bazą danych jest jednym z najczęstszych przykładów Singleton. Potrzebujesz jednego połączenia. – pidabrow

Odpowiedz

2

Collections.emptySet() to typowy przykład pojedynczego singletona, który nie może być zaimplementowany jako klasa statyczna, ponieważ, oczywiście, jego celem jest być instancją interfejsu java.util.Set. Tworzenie plików nie jest kosztowne, ale utworzenie nowej instancji za każdym razem, gdy potrzebny jest pusty zestaw, byłoby głupie, ponieważ wyjątkowe wystąpienie może zostać ponownie użyte.

1

Klasy, które wykonują rejestrowanie lub często mają dostęp do baz danych, często podążają za wzorcem Singleton. Zasadniczo wszystko, co powinno mieć metody instancji i które jest kosztowne w konstrukcji.

0

Moja odpowiedź jest dość krótka, ale wystarczy użyć dokładnie wspólnego singletonu zamiast jego statycznej implementacji. Odpowiedź brzmi:

  • wybierane paradygmatu (tak jest!)
  • wątki (synchronizacja itp)
  • implementacja interfejsu (klasa statyczna ma pewne ograniczenia)
0

Zakres i zachowanie są różne obawy i NIE powinny być mieszane. Możesz chcieć, aby Twój obiekt był dostępny dla każdego zastosowania, dla wątku, na żądanie sieciowe, na sesję lub globalnie (Singleton). Przyczyny wprowadzenia tych korekt są prawdopodobnie spowodowane zarządzaniem zasobami i ostatecznie wydajnością. Zachowanie wewnątrz klasy nie powinno się zmieniać, jeśli zmienisz jej zakres.

Singleton to wzorzec do wzięcia zwykłego obiektu i kontrolowania jego zasięgu za pomocą niewielkiej ilości kodu przykręcanego. Idealnie jednak, naprawdę nie powinieneś naprawdę zajmować się zasięgiem wewnątrz obiektu i przekazywać go do fabryki lub kontenera.

Powiązane problemy