Singleton Class v Javě - Jak používat Singleton Class?



Tento článek o Singleton Class v Javě hovoří o různých způsobech, jak lze z třídy vytvořit Singleton, spolu s praktickými implementacemi.

V Javě je třída singleton třída, která může mít v danou dobu pouze jednu instanci. Je to jeden z pěti vzorů Creational Design v Javě, který pomáhá při snadném vývoji . Prostřednictvím tohoto článku vám poskytnu jasný přehled o tom, co je třída singleton v Javě a jak ji můžete vytvořit.

Níže uvádíme témata, kterým se budu v tomto článku věnovat:





Začněme.

Co je třída Singleton v Javě?

Laicky řečeno, třída Singleton v Javě je třída, která k ní umožňuje přístup prostřednictvím jediné instance najednou. Tento návrhový vzor slouží k omezení zbytečného vytváření instancí třídy a zajištění pouze jedné existuje v každém okamžiku na instanci JVM. S tímto vzorem tedy každá třída, která je definována jako Singleton, má pouze jednu instancis globálním přístupovým bodem. Na rozdíl od běžných tříd není singletonová třída do konce životního cyklu aplikací zničena.



Ale proč vůbec potřebujeme třídu Singleton?

Omezením vytváření instance třídy šetří místo v paměti, protože objekt nebude vytvořen pokaždé, když je vytvořen nový požadavek. Místo toho bude jeden objekt používán opakovaně. To je důvod, proč se vzor Singleton v Javě nejčastěji používá a databázové aplikace. V zásadě se používá pro protokolování, ukládání do mezipaměti, sdružování vláken, nastavení konfigurace a mnoho dalších.

Doufám, že máte jasno v pojetí třídy Singleton v Javě. Pojďme tedy v tomto pokračovat dáleČlánek Singleton Class in Java a podívejte se, jak jsou vytvořeny.



Způsoby, jak navrhnout třídu Java Singleton

Abyste mohli v Javě vytvořit singleton třídy, potřebujete následující tři věci:

kdy použít tuto javu
  1. statický člen třídy
  2. soukromý konstruktér
  3. statická tovární metoda

Protože Java umožňuje vývojářům prozkoumat jejich obzory, existujíněkolik způsobů, jak můžete navrhnout třídu Singleton. Níže jsem uvedl ty nejoblíbenější.

  1. Metoda inicializace dychtivosti
  2. Líná metoda inicializace
  3. Metoda bezpečných vláken Singleton
  4. Líná inicializace metodou Double Lock
  5. Lazy Load Method
  6. Metoda inicializace statického bloku

Pojďme se nyní hlouběji ponořit do každého z těchto přístupů jeden po druhém.

1. Metoda inicializace dychtivosti

Toto je nejjednodušší způsob vytvoření třídy Singleton, kde je instance vytvořena v době načítání třídy. Chcete-li pomocí této metody vytvořit třídu singleton, musíte postupovat podle níže uvedených kroků:

  1. Prohlásit konstruktor za soukromý.
  2. Dalším krokem je vytvoření člena soukromé třídy pro tuto třídu Singleton.
  3. Nyní musíte definovat tovární metodu, která se použije k vrácení objektu vaší třídy, který jsme vytvořili jako instanci člena třídy.
  4. Můžete dokonce deklarovat statický člen jako veřejný, pokud chcete přímo přistupovat k této statické instanci.

Nyní se podívejme, jak je implementovat.

// Eager Initialization public class EagerSingleton {private static final EagerSingleton INSTANCE = new EagerSingleton () private EagerSingleton () {} public static EagerSingleton getInstance () {return INSTANCE}}

Pokud vidíte kód, můžete si všimnout, že pokaždé, když vytváříme instanci objektu, který využívámegetInstance ()spíše než vyvoláním třídy stavitel .Má však své vlastní nevýhody. Pokud použijete tuto metodu k vytvoření singletonu třídy, bude instance vytvořena bez ohledu na to, zda ji aplikace používá nebo ne.

co je charat v javě

Pojďme se tedy podívat na další způsob, jak vytvořit třídu singletonů v Javě.

2. Líná metoda inicializace

Tato metoda se nazývá líná inicializace, protože odkládá vytvoření instance třídy až do jejího prvního použití. Myslím tím, že s touto metodou je objekt vytvořen, pouze pokud je to potřeba. Pomáhá předcházet zbytečnému vytváření . Chcete-li navrhnout třídu singleton tímto způsobem, musíte postupovat podle níže uvedených kroků:

  1. Nejprve deklarujte konstruktor jako soukromý.
  2. Pak musíte pro tuto třídu vytvořit soukromou statickou instanci, ale ještě ji nemusíte vytvářet instanci.
  3. Nakonec vytvořte tovární metodu, která nejprve zkontroluje, zda je člen instance null nebo ne. Pokud ne, vytvoří pro vás instanci třídy singleton a vrátí ji.

Níže uvedený kód ukazuje, jak to provést.

// Lazy Initialization public class LazySingleton {private static LazySingleton INSTANCE = null private LazySingleton () {} public static LazySingleton getInstance () {if (INSTANCE == null) {synchronized (LazySingleton.class) {INSTANCE = new LazySingleton ()}} vrátit INSTANCE}}

3. Thread Safe Singleton Metoda

Výše uvedený přístup však může vyvolat určité obavy v souběžných scénářích. Vzhledem k tomu, že singletonový vzor se používá hlavně s vícevlákny a pokudvíce vláken vstupuje do podmínky if současně, což může způsobit problémy. Abychom tomu zabránili, pokusíme se vytvořit třídu singletonu bezpečnou pro vlákna synchronizací globální metody přístupu. Tím je zajištěno, že tuto metodu provádí v kterémkoli okamžiku pouze jedno vlákno. Implementaci najdete v níže uvedeném kódu:

// Thread Safe Singleton public class ThreadSafeSingleton {private static ThreadSafeSingleton INSTANCE private ThreadSafeSingleton () {} public static synchronized ThreadSafeSingleton getInstance () {if (INSTANCE == null) {INSTANCE = new ThreadSafeSingleton ()} return INSTANCE

Ale někdy se tento přístup může stát velmi těžkopádným jako pokaždé, když se jedná o metoduje vyvolána, musí počkat, až se zámek uvolní, než ji metoda může použít. To má za následek zpomalení procesu a to nás vede k dalšímu přístupu, který jeLíná inicializace s Double Lock.

v pythonu je metoda __init__ třídy zvyklá

4. Líná inicializace s Double Lock Metoda

V tomto přístupu nesynchronizujeme metody. Spíše obalíme kód pro vytvoření objektu v synchronizovaném bloku.Můžete to říci předem zkontrolováním zámků vlákensnižuje počet akvizic zámků. Tento přístup obvykle vede ke zvýšení výkonu aplikace. Podívejte se na níže uvedený kód a uvidíte, jak se to dělá.

// Lazy Initialization with Double Lock public class LazyDoubleLockSingleton {private static LazyDoubleLockSingleton INSTANCE = null private LazyDoubleLockSingleton () {} public static LazyDoubleLockSingleton getInstance () {if (INSTANCE == null) {synchronized (LazyDoubleLockSingleton = null) {INSTANCE = new LazyDoubleLockSingleton ()}}} vrátit INSTANCE}}

5. Lazy Load Method

Tato metoda je založena na JSL (Java Language Specification) a podle toho načte statické datové členy pouze v případě, že jsou požadovány. Když je tedy vaše třída singleton načtena do JVM, nevytvoří se žádná instance. Dále je během provádění programu vyvolána globální metoda v postupném pořadí. S touto metodou nemusíte explicitně synchronizovat statickou getInstance () k načtení a inicializaci. Člen statické třídy bude vyvolán správným sekvenčním způsobem, zbytek souběžných vyvolání globální metody bude vrácen ve stejném pořadí, aniž by bylo nutné provést režii synchronizace.

Níže je uveden kód, který provádí totéž.

// Lazy Load Method public class LazyLoadSingleton {private LazyLoadSingleton () {} private static class SingletonClassHolder {static final Var INSTANCE = new LazyLoadSingleton ()} public static LazyLoadSingleton getInstance () {return SingletonClassHolder.INSTANCE}}

6. Metoda inicializace statického bloku

Tato metoda vytváření třídy singleton v Javě jepodobně jako nedočkavá metoda inicializace. Jediným rozdílem je, že instance pro tuto třídu je vytvořena v rámci statického bloku, který má funkčnost.

// Inicializace statického bloku veřejná třída StaticBlockSingleton {private static StaticBlockSingleton INSTANCE private StaticBlockSingleton () {} // zpracování výjimek ve statickém bloku static {try {INSTANCE = new StaticBlockSingleton ()} catch (Exception e) {throw new RuntimeException ('Exception occurs při vytváření třídy Singleton ')}} public static StaticBlockSingleton getInstance () {return INSTANCE}}

Tím se dostáváme na konec tohoto článku o třídě Singleton v Javě. Pokud se chcete o Javě dozvědět více, můžete se podívat na naši .

Nyní, když jste pochopili, co je třída Singleton v Javě, podívejte se na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů po celém světě. Školicí a certifikační kurz Edureka Java J2EE a SOA je určen pro studenty a profesionály, kteří chtějí být vývojářem Java. Kurz je navržen tak, aby vám poskytl náskok v programování v Javě a naučil vás základní i pokročilé koncepty Javy spolu s různými jávskými rámci, jako je Hibernate & Spring.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů v tomto článku „Singleton Class in Java“ a my se vám ozveme co nejdříve.