Šajā apmācībā mēs uzzināsim par vienreizējā dizaina modeli un to, kā ar piemēru palīdzību to pielietot Java.
Singleton ir dizaina modelis, nevis Java specifiska iezīme. Tas nodrošina, ka tiek izveidots tikai viens klases gadījums.
Dizaina paraugs ir līdzīgs mūsu kodu bibliotēkai, kas ietver dažādas kodēšanas metodes, ar kurām programmētāji dalās visā pasaulē.
Java Singleton
Lūk, kā mēs varam izmantot Java vieniniekus.
- izveidot
private
konstruktoru, kas ierobežo objekta izveidošanu ārpus klases - izveidojiet
private
atribūtu, kas attiecas uz vienu vienīgo objektu. - izveidot
public static
metodi, kas ļauj mums izveidot un piekļūt mūsu izveidotajam objektam. Metodes iekšpusē mēs izveidosim nosacījumu, kas neļauj mums izveidot vairāk nekā vienu objektu.
Lūk, piemērs.
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 ) )
Iepriekš minētajā piemērā
private static SingletonExample singleObject
- atsauce uz klases objektu.private SingletonExample()
- privāts konstruktors, kas ierobežo objektu veidošanu ārpus klases.public static SingletonExample getInstance()
- šī metode atgriež atsauci uz vienīgo klases objektu. Tā kā metode ir statiska, tai var piekļūt, izmantojot klases nosaukumu.
Singleton klases izmantošana
Strādājot ar datu bāzēm, var izmantot vieniniekus. Tos var izmantot, lai izveidotu savienojumu kopu, lai piekļūtu datu bāzei, vienlaikus atkārtoti izmantojot to pašu savienojumu visiem klientiem. Piemēram,
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(); ) )
Kad mēs palaidīsim programmu, izeja būs:
Tagad esat izveidojis savienojumu ar datu bāzi.
Mūsu iepriekš minētajā piemērā
- Mēs esam izveidojuši vienklases klases datu bāzi.
- DbObject ir klases tipa lauks. Tas attieksies uz klases datu bāzes objektu.
- Privātais konstruktors
Database()
novērš objektu izveidi ārpus klases. - Statiskā klases tipa metode
getInstance()
atgriež klases instanci ārpasaulei. - Galvenajā klasē mums ir klases tipa mainīgais db1. Mēs
getInstance()
izmantojam db1, lai iegūtu vienīgo datu bāzes objektu. - Metodei
getConnection()
var piekļūt, tikai izmantojot datu bāzes objektu. - Tā kā datu bāzei var būt tikai viens objekts, visi klienti var piekļūt datu bāzei, izmantojot vienu savienojumu.
Ir svarīgi atzīmēt, ka ir tikai daži scenāriji (piemēram, mežizstrāde), kur vieniniekiem ir jēga. Pat datu bāzes savienojumam parasti nevajadzētu būt vienīgajam.
Mēs iesakām pilnībā izvairīties no vieninieku izmantošanas, ja neesat pārliecināts, vai to izmantot. Uzziniet vairāk: Kas Singletonā ir tik slikts?