Java Singleton (med exempel)

I den här handledningen lär vi oss om singleton-designmönstret och hur man använder det i Java med hjälp av exempel.

Singleton är ett designmönster snarare än en funktion som är specifik för Java. Det säkerställer att endast en instans av en klass skapas.

Ett designmönster är som vårt kodbibliotek som innehåller olika kodningstekniker som delas av programmerare runt om i världen.

Java Singleton

Så här kan vi använda singletons i Java.

  • skapa en privatekonstruktör som begränsar att skapa ett objekt utanför klassen
  • skapa ett privateattribut som hänvisar till singleton-objektet.
  • skapa en public staticmetod som låter oss skapa och komma åt objektet vi skapade. Inuti metoden kommer vi att skapa ett villkor som begränsar oss från att skapa mer än ett objekt.

Här är ett exempel.

 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 ) ) 

I exemplet ovan,

  • private static SingletonExample singleObject - en hänvisning till klassens objekt.
  • private SingletonExample() - en privat konstruktör som begränsar skapandet av objekt utanför klassen.
  • public static SingletonExample getInstance()- den här metoden returnerar referensen till klassens enda objekt. Eftersom metoden är statisk kan den nås med hjälp av klassnamnet.

Användning av Singleton Class

Singletons kan användas när du arbetar med databaser. De kan användas för att skapa en anslutningspool för att komma åt databasen medan samma anslutning återanvänds för alla klienter. Till exempel,

 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(); ) ) 

När vi kör programmet blir resultatet:

 Du är nu ansluten till databasen. 

I vårt exempel ovan,

  • Vi har skapat en singleton-klassdatabas.
  • DbObject är ett klassfält. Detta kommer att hänvisa till objektet i klassen Databas.
  • Den privata konstruktören Database()förhindrar skapande av objekt utanför klassen.
  • Den statiska klasstypsmetoden getInstance()returnerar förekomsten av klassen till omvärlden.
  • I huvudklassen har vi klasstyp variabel db1. Vi ringer getInstance()med db1 för att få det enda objektet i databasen.
  • Metoden getConnection()kan endast nås med objektets databas.
  • Eftersom databasen bara kan ha ett objekt kan alla klienter komma åt databasen via en enda anslutning.

Det är viktigt att notera att det bara finns några scenarier (som loggning) där singletons är vettiga. Även en databasanslutning borde vanligtvis inte vara en singleton.

Vi rekommenderar att du undviker att använda singletons helt om du inte är säker på om du ska använda den eller inte. Läs mer: Vad är så dåligt med Singleton?

Intressanta artiklar...