Ebben az oktatóanyagban példák segítségével megismerhetjük a szingulett tervezési mintázatát és annak alkalmazását a Java-ban.
A Singleton inkább tervezési mintázat, mintsem a Java-ra jellemző szolgáltatás. Biztosítja, hogy egy osztályból csak egy példány készüljön.
A tervezési minta olyan, mint a kódkönyvtárunk, amely különféle kódolási technikákat tartalmaz, amelyeket a programozók világszerte megosztanak.
Java Singleton
Így használhatjuk a szingleteket a Java-ban.
- hozzon létre egy
private
konstruktort, amely korlátozza az osztályon kívüli objektum létrehozását - hozzon létre egy
private
attribútumot, amely a szingulett objektumra utal. - hozzon létre egy olyan
public static
módszert, amely lehetővé teszi számunkra az általunk létrehozott objektum létrehozását és elérését. A módszer belsejében létrehozunk egy feltételt, amely korlátoz minket egynél több objektum létrehozásában.
Itt egy példa.
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 ) )
A fenti példában
private static SingletonExample singleObject
- hivatkozás az osztály objektumára.private SingletonExample()
- egy privát kivitelező, amely korlátozza az osztályon kívüli objektumok létrehozását.public static SingletonExample getInstance()
- ez a módszer visszaadja a hivatkozást az osztály egyetlen objektumára. Mivel a módszer statikus, az osztálynév segítségével érhető el.
A Singleton osztály használata
A szingulettek felhasználhatók az adatbázisokkal való munka közben. Ezekkel fel lehet használni egy kapcsolatkészlet létrehozását az adatbázis eléréséhez, miközben ugyanazt a kapcsolatot újból felhasználják az összes kliens számára. Például,
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(); ) )
A program futtatásakor a kimenet a következő lesz:
Most csatlakozik az adatbázishoz.
A fenti példánkban
- Létrehoztunk egy egyedi osztályú adatbázist.
- A dbObject egy osztály típusú mező. Ez az osztály Database objektumára fog vonatkozni.
- A privát konstruktor
Database()
megakadályozza az osztályon kívüli objektumok létrehozását. - A statikus osztálytípus módszer
getInstance()
az osztály példányát adja vissza a külvilágnak. - A Fő osztályban a db1 osztálytípusú változóval rendelkezünk. A
getInstance()
db1 használatával hívjuk meg az adatbázis egyetlen objektumát. - A módszer
getConnection()
csak az adatbázis objektumával érhető el. - Mivel az adatbázisnak csak egy objektuma lehet, az összes kliens egyetlen kapcsolaton keresztül férhet hozzá az adatbázishoz.
Fontos megjegyezni, hogy csak néhány olyan forgatókönyv létezik (például naplózás), ahol a szingletteknek van értelme. Még az adatbázis-kapcsolat sem lehet egyedi.
Javasoljuk, hogy kerülje a szingulettek teljes használatát, ha nem biztos abban, hogy használja-e vagy sem. Tudjon meg többet: Mi olyan rossz Singletonban?