V tomto tutoriále sa dozvieme o vzorovom návrhu singletonu a o tom, ako ho použiť v Jave, pomocou príkladov.
Singleton je skôr návrhový vzor ako funkcia špecifická pre Javu. Zaisťuje, že sa vytvorí iba jedna inštancia triedy.
Dizajnový vzor je ako naša knižnica kódov, ktorá obsahuje rôzne techniky kódovania zdieľané programátormi po celom svete.
Java Singleton
Tu je ukážka toho, ako môžeme použiť singletony v Jave.
- vytvoriť
private
konštruktor, ktorý obmedzuje vytvorenie objektu mimo triedy - vytvorte
private
atribút, ktorý odkazuje na singletonový objekt. - vytvoriť
public static
metódu, ktorá nám umožní vytvárať a pristupovať k objektu, ktorý sme vytvorili. Vo vnútri metódy vytvoríme podmienku, ktorá nás obmedzuje vo vytváraní viac ako jedného objektu.
Tu je príklad.
class SingletonExample ( // private field that refers to the object private static SingletonExample singleObject; private SingletonExample() ( // constructor of the SingletonExample class ) public static SingletonExample getInstance() ( // write code that allows us to create only one object // access the object as per our need ) )
Vo vyššie uvedenom príklade
private static SingletonExample singleObject
- odkaz na predmet triedy.private SingletonExample()
- súkromný konštruktor, ktorý obmedzuje vytváranie objektov mimo triedy.public static SingletonExample getInstance()
- táto metóda vráti odkaz na jediný objekt triedy. Pretože je metóda statická, je k nej prístupný pomocou názvu triedy.
Využitie triedy Singleton
Singletons je možné použiť pri práci s databázami. Môžu sa použiť na vytvorenie spoločného fondu pripojení na prístup do databázy, zatiaľ čo pre všetkých klientov sa bude používať rovnaké pripojenie. Napríklad,
class Database ( private static Database dbObject; private Database() ( ) public static Database getInstance() ( // create object if it's not already created if(dbObject == null) ( dbObject = new Database(); ) // returns the singleton object return dbObject; ) public void getConnection() ( System.out.println("You are now connected to the database."); ) ) class Main ( public static void main(String() args) ( Database db1; // refers to the only object of Database db1= Database.getInstance(); db1.getConnection(); ) )
Keď spustíme program, výstup bude:
Teraz ste pripojení k databáze.
V našom príklade vyššie
- Vytvorili sme singletonovú triedu Databáza.
- DbObject je pole typu triedy. Toto bude odkazovať na objekt triedy Databáza.
- Súkromný konštruktor
Database()
zabraňuje vytváraniu objektov mimo triedy. - Metóda statického typu triedy
getInstance()
vracia inštanciu triedy do vonkajšieho sveta. - V hlavnej triede máme premennú typu triedy db1. Voláme
getInstance()
pomocou db1, aby sme dostali jediný objekt databázy. - Prístup k metóde
getConnection()
je možný iba pomocou objektu databázy. - Pretože databáza môže mať iba jeden objekt, všetci klienti majú prístup k databáze prostredníctvom jedného pripojenia.
Je dôležité poznamenať, že existuje iba niekoľko scenárov (napríklad protokolovanie), keď majú singletony zmysel. Ani pripojenie k databáze by nemalo byť zvyčajne jednoslovné.
Ak si nie ste istí, či ich máte alebo nemáte používať, odporúčame vám vyhnúť sa úplnému používaniu singletonov. Viac informácií: Čo je na Singletone také zlé?