U ovom uputstvu naučit ćemo o uzorku dizajna pojedinca i kako ga primijeniti u Javi uz pomoć primjera.
Singleton je dizajnerski obrazac, a ne značajka specifična za Javu. Osigurava stvaranje samo jedne instance klase.
Uzorak dizajna je poput naše biblioteke koda koja uključuje razne tehnike kodiranja koje dijele programeri širom svijeta.
Java Singleton
Evo kako možemo koristiti singletone u Javi.
- stvoriti
private
konstruktor koji ograničava stvaranje objekta izvan klase - stvoriti
private
atribut koji se odnosi na singleton objekt. - stvoriti
public static
metodu koja nam omogućuje stvaranje i pristup objektu koji smo stvorili. Unutar metode stvorit ćemo uvjet koji nas ograničava u stvaranju više objekata.
Evo primjera.
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 ) )
U gornjem primjeru,
private static SingletonExample singleObject
- referenca na objekt klase.private SingletonExample()
- privatni konstruktor koji ograničava stvaranje objekata izvan klase.public static SingletonExample getInstance()
- ova metoda vraća referencu na jedini objekt klase. Budući da je metoda statična, može joj se pristupiti pomoću naziva klase.
Korištenje klase Singleton
Jednotoni se mogu koristiti tijekom rada s bazama podataka. Mogu se koristiti za stvaranje spremišta veza za pristup bazi podataka, dok se ista veza ponovno koristi za sve klijente. Na primjer,
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(); ) )
Kada pokrenemo program, izlaz će biti:
Sada ste povezani s bazom podataka.
U našem gornjem primjeru,
- Stvorili smo bazu podataka singleton klase.
- DbObject je polje tipa klase. To će se odnositi na objekt klase Database.
- Privatni konstruktor
Database()
sprečava stvaranje predmeta izvan klase. - Metoda statičkog tipa klase
getInstance()
vraća instancu klase vanjskom svijetu. - U glavnoj klasi imamo varijablu tipa klase db1. Pozivamo
getInstance()
pomoću db1 da bismo dobili jedini objekt baze podataka. - Metodi
getConnection()
se može pristupiti samo pomoću objekta baze podataka. - Budući da Baza podataka može imati samo jedan objekt, svi klijenti mogu pristupiti bazi podataka putem jedne veze.
Važno je napomenuti da postoji samo nekoliko scenarija (poput bilježenja) kada pojedinačni tonovi imaju smisla. Čak i veza baze podataka obično ne bi trebala biti jednostruka.
Preporučujemo vam da u potpunosti izbjegavate upotrebu jednostrukih tonova ako niste sigurni želite li ih koristiti ili ne. Saznajte više: Što je toliko loše u Singletonu?