Úvod do třídy Singleton v Javě

Třída Singleton omezuje vytváření objektů pro třídu pouze na jeden ve virtuálním počítači java. Pomáhá také při poskytování globálního přístupového bodu k objektu. Tento návrhový vzor se běžně používá v mezipaměti, abstraktní továrně, protokolování, prototypech atd. Používá se také v základních třídách Java, jako je java.awt.Desktop, java.lang.Runtime. V java.lang.Runtime poskytuje Java třídu Runtime, která označuje aktuální Runtime Environment, ve kterém je aplikace spuštěna. To pomáhá při propojování aplikačního a runtime prostředí. Měl by existovat jeden objekt, protože JRE je jedinečný. V java.awt.Desktop třída Desktop umožňuje aplikacím spouštět URI nebo soubor s výchozím prohlížečem uživatele, poštovního klienta atd. Také zde musí být pouze jedna instance třídy.

Jak Singleton Class funguje v Javě

Singleton Class lze vytvořit dvěma způsoby.

  1. Nastavit konstruktor jako soukromý, aby se omezilo vytváření objektu.
  2. Vytvořte statickou metodu a získejte instanci objektu, abyste mohli zpracovat vytvoření objektu pouze ve třídě.

Nyní se podívejme na diagram třídy UML (Unified Modeling Language) třídy Singleton Class.

V diagramu třídy UML první oddíl představuje název třídy, druhý oddíl představuje atributy a třetí oddíl představuje metody. + Také označuje veřejné atributy nebo metody a - označuje soukromé atributy nebo metody. V našem diagramu třídy UML Singleton je název třídy Singleton a má hlavní metodu. Hlavní metoda, metoda getInstance a sampleMethod jsou jediné metody, které jsou ve výše uvedeném diagramu veřejné. Atribut konstruktoru a instance je v rámci naší implementace nastaven jako soukromý. Tato veřejná hlavní metoda požádá o instanci a getInstance ji vrátí hlavní metodě.

Na základě Instantiation je jediným rozdílem mezi normální třídou Java a třídou Singleton to, že budeme používat konstruktor v třídě Java, zatímco v Singletonu budeme používat metodu getInstance ().

Návrhový vzor Singleton má dvě podoby.

  • Lazy Instantiation: Vytvoření instance v případě potřeby
  • Brzy okamžité: Vytvoření instance v době načítání.

1. Lazy Instantiation

V Lazy Instantiation je instance třídy vytvořena, když je vyžadována. Je vytvořen synchronizovanou metodou nebo blokem, aby se zabránilo závodním podmínkám, ke kterým může dojít v prostředí s více vlákny.

2. Brzy okamžité

V rané instanci je instance vytvořena v době načítání. Přestože se jedná o nejjednodušší přístup, má tu nevýhodu, že vytváření instance je bez ohledu na to, zda je přístupný nebo ne.

Příklad Lazy Instantiation a Early Instantiation je vysvětlen v následující části.

Implementace třídy Singleton v Javě

Jak bylo uvedeno výše, třídu Singleton lze vytvořit v rané instanci nebo lazy.

Lazy Instantiation

Následují kroky k implementaci Lazy Instantiation

1. Nastavte Constructor jako soukromý.

Například vytváříme třídu LazyClass. Konstruktor bude zobrazen níže.

private LazyClass ()
(
)

2. Vytvořte soukromou statickou instanci pro vytvořenou třídu.

private static LazyClass instance;

3. Vytvořte statickou synchronizovanou metodu, která vytvoří instanci třídy.

public static synchronized LazyClass getInstance()
(
)

4. V metodě getInstance () nejprve zkontrolujte, zda je přítomna nějaká instance. Pokud není nalezen, vytvořte jej. Jinak vrátí instanci.

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

Nyní se na to podívejme pomocí ukázkového kódu.

//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();
)
)

Výstup:

Zde se místo vytvoření instance v době načítání vytvoří uvnitř synchronizovaného bloku. Pro lepší pochopení je také uvedena ukázková metoda, která je chráněna před více než jedním vytvořením objektu.

Brzy okamžité

Nyní se podívejme na kroky k Brzké instanci. Je podobná Lazy instanci, kromě toho, že nepoužívá žádnou synchronizovanou metodu nebo blok.

1. Nastavte Constructor jako soukromý.

Například vytváříme třídu EarlyClass. Konstruktor bude zobrazen níže.

private EarlyClass () ()
(
)

2. Vytvořte soukromou statickou instanci pro vytvořenou třídu.

private static EarlyClass ins = new EarlyClass();

3. Vytvořte statickou metodu, která vytvoří instanci třídy.

public static EarlyClass getInstance()
(
)

Následuje ukázkový kód pro včasnou instanci.

//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();
)
)

Výstup:

Ve výše uvedeném programu je instance vytvořena v době načítání a je vrácena pomocí metody getInstance (). Kromě toho je Constructor nastaven jako soukromý jako součást singletonové instance.

Úspora paměti je hlavní výhodou použití, protože objekt je znovu použit a není vytvářen znovu a znovu.

Závěr

V tomto dokumentu jsme se zabývali tím, jak třída Singleton funguje pomocí diagramu třídy UML, algoritmu a ukázkového kódu. Třída Singleton se používá, když pro třídu potřebujeme pouze jeden objekt a globální přístupový bod k tomuto objektu. Na základě požadavku lze použít dvě formy, jako je Brzy instanci a Lazy Instantiation.

Doporučené články

Toto je průvodce třídou Singleton v Javě. Zde diskutujeme o tom, jak singletonová třída funguje v java spolu s implementací, která zahrnuje línou instanci a časnou instanci. Další informace naleznete také v dalších navrhovaných článcích -

  1. Co je Design Pattern v Javě?
  2. Abstraktní třída v Javě
  3. Poznámky jazyka Java
  4. BorderLayout v Javě
  5. JRE vs JVM | 8 hlavních rozdílů s (infografika)
  6. Jak pracovat se statickou metodou v JavaScriptu?

Kategorie: