2013-09-05 15 views
14

Czy w języku Java w języku singleton należy używać zmiennych statycznych lub zmiennych składowych? Czy są jakieś korzyści?Czy pojedyncza Java powinna używać zmiennych statycznych?

+0

Zobacz: http://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern –

+0

Byłbyś w stanie zbudować singleton bez użycia co najmniej jednej zmiennej statycznej. – dasblinkenlight

+0

@dasblinkenlight Tak, potrzebowałbym jednego, ale pytanie dotyczy wszystkich innych zmiennych, które mogą być zmiennymi członowymi lub zmiennymi statycznymi. – Andreas

Odpowiedz

11

Powinieneś używać zmiennych składowych. Singleton jest obiektem (to znaczy instancją klasy) i dlatego powinien być modelowany jako taki; nawet jeśli masz zamiar stworzyć tylko jedną z nich.

Dla zmiennych na poziomie klasy należy stosować statykę.

+0

Zmienne członkowskie są rodzicami zmiennych statycznych http://www.programmerinterview.com/index.php/c-cplusplus/whats-the-difference-between-a-class-variable-and-an-instance-variable/ – SpringLearner

4

można uniknąć stosując zmienne statyczne i używać Enum zamiast:

public enum MySingleton { 
    INSTANCE; 
} 

Możesz uzyskać dostęp do tego singleton jako MySingleton.INSTANCE.

Enum jest bezpieczny dla wątków, a implementacja Singleton przez Enum zapewnia, że ​​singleton będzie miał tylko jedno wystąpienie nawet w środowisku wielowątkowym.

2

Nie ma uprawnień do używania zmiennych statycznych lub zmiennych członkowskich. Ponieważ singleton będzie miał logicznie tylko jedną instancję, użycie zmiennej statycznej lub zmiennej członkowskiej nie ma znaczenia. Poza tym, utrzymywanie różnicy zmiennych statycznych i instancji zmiennych statycznych zostanie zainicjowanych podczas ładowania klasy, ale zmienne instancji zostaną zainicjowane podczas tworzenia instancji.

Ale jako ogólna zasada programowania, powinieneś zdecydować, czy potrzebujesz zmiennej statycznej, czy nie. Nie twórz po prostu publicznych zmiennych statycznych, a kończy się niepotrzebnymi problemami. Tak więc, moim zdaniem, zmienne instancji powinny być preferowane, aby zachować prostotę i kontrolę.

2

Jego nie wymagają użycia statycznego variables.You można użyć enum również

zobaczyć this

+0

Since wyliczenie jest z definicji statyczne, po prostu nie pokazuje, że używa zmiennych statycznych. W przeciwnym razie enum to dobra implementacja singletona – Xtroce

2

To zależy od konkretnej zmiennej. Zdecydowanie najczęstszym zastosowaniem jest to, że singleton jest normalnym obiektem przechowującym zmienne składowe. Możesz na przykład łatwo zamienić jeden obiekt na inny (ze wszystkimi innymi właściwościami).

Każda klasa może mieć zmienne statyczne, ale nie ma znaczenia, czy jest pojedyncza, czy nie.

Wzór Singleton w swojej naturze zajmuje się instancją obiektu. Statyka jest licznikiem klas -> brak związku ze wzorcem singletowym.

1

Podano już wiele informacji: użyj zmiennych statycznych lub zmiennej statycznej wskazującej instancję lub użyj wyliczenia.

Duża różnica polega na tym, że twoja jedna tona jest członkiem klasy, która jest podklasą innej klasy.

W związku z tym twoja instancja singleton dziedziczy po super klasie.

To może mieć ogromną zaletę.

Współrzędne nie mogą się wzajemnie rozszerzać, ale można użyć wyliczenia, które implementuje interfejsy.

5

Musi istnieć statyczne odwołanie do instancji singleton, ale sama instancja powinna używać zmiennych instancji, tak jak zwykła klasa.

Powód jest taki, że instancja singleton jest po wszystkim obiektem, więc zwykle dobre zasady projektowania nadal mają zastosowanie do jej klasy.

Dzisiaj, dzisiaj to singleton, ale jutro może być ThreadLocal, lub nie ma żadnych ograniczeń tworzenia instancji. Zmiana między tymi wyborami architektonicznymi jest bardzo niska, jeśli klasa jest zaprojektowana w zwykły sposób. Jeśli używasz pól statycznych, takie zmiany wymagałyby więcej prac konserwacyjnych, aby uczynić pola niestatycznymi.

+0

Dlaczego zmienne instancji? – Andreas

+0

@Andreas zobacz zmiany, aby odpowiedzieć na pytanie, dlaczego – Bohemian

Powiązane problemy