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?
Odpowiedz
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ę.
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
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.
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ę.
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.
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.
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.
- 1. Czy klasa usług powinna być pojedyncza w java?
- 2. Jak skutecznie używać zmiennych statycznych?
- 3. Dostęp do zmiennych statycznych
- 4. Dlaczego używać bloków statycznych zamiast bezpośredniego inicjowania zmiennych instancji?
- 5. Używanie zmiennych statycznych Constellation C++
- 6. Deklaracja statycznych zmiennych składowych, takich jak Java w Objective-C
- 7. Inicjalizacja zmiennych statycznych w C
- 8. Java: Lokalizacja ciągów statycznych
- 9. Czy istnieją odpowiedniki "to" dla zmiennych statycznych w C#
- 10. Aplikacja C++ - czy powinienem używać bibliotek statycznych czy dynamicznych?
- 11. Czy zawsze powinienem używać statycznych metod fabrycznych zamiast konstruktorów?
- 12. Czy garbage collector działa na statycznych zmiennych lub metodach w java?
- 13. Zwracanie statycznych zmiennych lokalnych jako odniesień
- 14. Używanie zmiennych statycznych w adnotacjach Wiosna
- 15. Przechowywanie ogromnych zmiennych statycznych w C++
- 16. Czy mogę używać zmiennych dla selektorów?
- 17. Inicjalizacja zmiennych statycznych C++ wewnątrz funkcji szablonu
- 18. Jak zmienić wartość zmiennych statycznych w PHP?
- 19. Używanie zmiennych statycznych w maszynce do golenia
- 20. Czy można poddawać recyklingowi lub ponownie używać zmiennych?
- 21. Czy moja klasa sesji powinna być statyczna?
- 22. Czy pojedyncza zawartość pamięci pozostaje przy aktualizacji?
- 23. czy można używać zmiennych w zdalnych komendach ssh?
- 24. Pojedyncza animacja - wiele widoków
- 25. PHP: Kiedy używać funkcji i kiedy używać metod statycznych?
- 26. Jak nie używać zmiennych globalnych w c
- 27. Jak używać statycznych metod/klas w ramach operacji async/await?
- 28. Nazwy zmiennych Java Unicode
- 29. Używanie zmiennych statycznych i funkcji w zakresie globalnym
- 30. Jak mogę uzyskać listę zmiennych statycznych w klasie?
Zobacz: http://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern –
Byłbyś w stanie zbudować singleton bez użycia co najmniej jednej zmiennej statycznej. – dasblinkenlight
@dasblinkenlight Tak, potrzebowałbym jednego, ale pytanie dotyczy wszystkich innych zmiennych, które mogą być zmiennymi członowymi lub zmiennymi statycznymi. – Andreas