Wprowadzenie do Singleton Class w Javie

Klasa Singleton ogranicza tworzenie obiektów dla klasy tylko do jednej na maszynie wirtualnej Java. Pomaga również w zapewnieniu globalnego punktu dostępu do obiektu. Ten wzorzec projektowy jest powszechnie używany w pamięci podręcznej, fabryce abstrakcyjnej, logowaniu, prototypie itp. Jest także używany w podstawowych klasach Java, takich jak java.awt.Desktop, java.lang.Runtime. W java.lang.Runtime Java udostępnia klasowe środowisko wykonawcze, które oznacza bieżące środowisko wykonawcze, w którym działa aplikacja. Pomaga to w połączeniu aplikacji i środowiska wykonawczego. Powinien być jeden obiekt, ponieważ środowisko JRE jest unikalne. W java.awt.Desktop klasa Desktop zezwala aplikacjom na uruchamianie identyfikatora URI lub pliku z domyślną przeglądarką użytkownika, klienta poczty itp. Tutaj również musi istnieć tylko jedna instancja klasy.

Jak działa Singleton Class w Javie

Singleton Class można utworzyć na dwa sposoby.

  1. Ustaw konstruktor jako prywatny, aby ograniczyć tworzenie obiektu.
  2. Utwórz metodę statyczną, aby uzyskać instancję obiektu, abyś mógł obsługiwać tworzenie obiektu tylko w klasie.

Zobaczmy teraz diagram Class UML (Unified Modeling Language) Singleton Class.

Na diagramie UML klasy pierwsza partycja reprezentuje nazwę klasy, druga partycja reprezentuje atrybuty, a trzecia partycja reprezentuje metody. Również + wskazuje publiczne atrybuty lub metody, a - wskazuje prywatne atrybuty lub metody. Na naszym diagramie UML klasy Singleton nazwa klasy to Singleton i ma ona główną metodę. Główna metoda, getInstance Method i sampleMethod są jedynymi metodami publicznymi na powyższym diagramie. Konstruktor i atrybut instancji są ustawiane jako prywatne w ramach naszej implementacji. Ta publiczna metoda Main prosi o instancję, a getInstance zwraca ją do metody main.

Na podstawie instancji jedyną różnicą między normalną klasą Java a klasą Singleton jest to, że użyjemy konstruktora w klasie Java, podczas gdy w Singleton zastosujemy metodę getInstance ().

Wzór singletonu ma dwie formy.

  • Leniwa instancja: tworzenie instancji w razie potrzeby
  • Wczesna instancja: tworzenie instancji w czasie ładowania.

1. Leniwa instancja

W Lazy Instantiation instancja klasy jest tworzona, gdy jest wymagana. Jest on tworzony w zsynchronizowanej metodzie lub bloku, aby uniknąć warunków wyścigu, które mogą wystąpić w środowisku wielowątkowym.

2. Wczesna instancja

We wczesnej instancji instancja jest tworzona w czasie ładowania. Chociaż jest to najprostsze podejście, ma tę wadę, że tworzenie instancji jest niezależne od tego, czy jest dostępne, czy nie.

Przykład leniwej instancji i wczesnej instancji wyjaśniono w poniższej sekcji.

Implementacja Singleton Class w Javie

Jak omówiono powyżej, Singleton Class można utworzyć we wczesnej instancji lub w instancji opóźnionej.

Leniwa instancja

Poniżej przedstawiono kroki, aby wdrożyć Lazy Instantiation

1. Ustaw Konstruktor jako prywatny.

Na przykład tworzymy klasę LazyClass. Konstruktor będzie wyglądał jak pokazano poniżej.

private LazyClass ()
(
)

2. Utwórz prywatną instancję statyczną dla utworzonej klasy.

private static LazyClass instance;

3. Utwórz statyczną zsynchronizowaną metodę, która tworzy instancję klasy.

public static synchronized LazyClass getInstance()
(
)

4. W metodzie getInstance () najpierw sprawdź, czy wystąpiło jakieś wystąpienie. Jeśli nie znaleziono, utwórz go. W przeciwnym razie zwróć instancję.

if(instance == null)
(
instance = new LazyClass ();
)
return instance;

Teraz przyjrzyjmy się temu za pomocą przykładowego kodu.

//Java Program for Lazy Instantiation
public class LazyClass (
private static LazyClass instance;
//set the constructor as private
private LazyClass () ()
//Checks whether an instance is already in the getInstance method
public static synchronized LazyClass getInstance() (
//if instance is not present already, create a new one
if(instance == null) (
instance = new LazyClass ();
)
// if an instance is present, then return it
return instance;
)
//Sample method that is protected from more than one object creation
public void sampleMethod( ) (
System.out.println("sampleMethod for lazy singleton");
)
public static void main(String() args) (
LazyClass temp=LazyClass.getInstance();
temp.sampleMethod();
)
)

Wynik:

Tutaj zamiast tworzyć instancję w czasie ładowania, jest ona tworzona wewnątrz zsynchronizowanego bloku. Dla lepszego zrozumienia podano również przykładową metodę, która jest chroniona przed tworzeniem więcej niż jednego obiektu.

Wczesna instancja

Zobaczmy teraz kroki dla wczesnej instancji. Jest podobny do tworzenia Lazy, z tym wyjątkiem, że nie używa żadnej zsynchronizowanej metody ani bloku.

1. Ustaw Konstruktor jako prywatny.

Na przykład tworzymy klasę EarlyClass. Konstruktor będzie wyglądał jak pokazano poniżej.

private EarlyClass () ()
(
)

2. Utwórz prywatną instancję statyczną dla utworzonej klasy.

private static EarlyClass ins = new EarlyClass();

3. Utwórz metodę statyczną, która utworzy instancję klasy.

public static EarlyClass getInstance()
(
)

Poniżej znajduje się przykładowy kod wczesnej instancji.

//Java Program for Early Instantiation
public class EarlyClass (
//Create an instance of the class at load time
private static EarlyClass ins = new EarlyClass();
//set the constructor as private
private EarlyClass () ()
//A static method to get the instance
public static EarlyClass getInstance() (
return ins ;
)
//A sample method that is protected from more than one object creation
public void sampleMethod() (
System. out .println("sampleMethod for Early singleton");
)
//Main method
public static void main(String() args) (
EarlyClass tmp = getInstance ();
tmp.sampleMethod();
)
)

Wynik:

W powyższym programie instancja jest tworzona w czasie ładowania i jest zwracana za pomocą metody getInstance (). Ponadto konstruktor jest ustawiony jako prywatny w ramach instancji singletonu.

Główną zaletą korzystania z tego rozwiązania jest oszczędność pamięci, ponieważ obiekt jest ponownie wykorzystywany i nie jest tworzony wielokrotnie.

Wniosek

W tym dokumencie omówiliśmy, jak działa Singleton Class za pomocą diagramu, algorytmu i kodu próbki UML klasy. Singleton Class jest używana, gdy potrzebujemy tylko jednego obiektu dla klasy i globalnego punktu dostępu do tego obiektu. Dwie formy, takie jak Wczesna instancja i Leniwa instancja, mogą być używane w zależności od wymagań.

Polecane artykuły

Jest to przewodnik po Singleton Class w Javie. Tutaj omawiamy działanie klasy singleton w Javie wraz z implementacją, która obejmuje leniwe tworzenie instancji i wczesne tworzenie instancji. Możesz także przejrzeć nasze inne sugerowane artykuły, aby dowiedzieć się więcej -

  1. Co to jest wzorzec projektowy w Javie?
  2. Klasa abstrakcyjna w Javie
  3. Adnotacje Java
  4. BorderLayout w Javie
  5. JRE vs JVM | 8 najważniejszych różnic z (Infografika)
  6. Jak pracować z metodą statyczną w JavaScript?