W tym samouczku nauczymy się na przykładach wzorca projektowania singleton i jak go zastosować w Javie.
Singleton to raczej wzorzec projektowy niż funkcja specyficzna dla języka Java. Zapewnia, że zostanie utworzona tylko jedna instancja klasy.
Wzorzec projektowy przypomina naszą bibliotekę kodu, która obejmuje różne techniki kodowania używane przez programistów na całym świecie.
Java Singleton
Oto, jak możemy używać singletonów w Javie.
- utworzyć
private
konstruktora, który ogranicza możliwość tworzenia obiektu poza klasą - utwórz
private
atrybut, który odwołuje się do obiektu singleton. - stworzyć
public static
metodę, która pozwala nam tworzyć i uzyskiwać dostęp do stworzonego przez nas obiektu. Wewnątrz metody utworzymy warunek, który ogranicza nam możliwość tworzenia więcej niż jednego obiektu.
Oto przykład.
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 ) )
W powyższym przykładzie
private static SingletonExample singleObject
- odniesienie do przedmiotu zajęć.private SingletonExample()
- prywatny konstruktor, który ogranicza tworzenie obiektów poza klasą.public static SingletonExample getInstance()
- ta metoda zwraca odwołanie do jedynego obiektu klasy. Ponieważ metoda statyczna jest dostępna, można uzyskać do niej dostęp za pomocą nazwy klasy.
Korzystanie z klasy singleton
Podczas pracy z bazami danych można używać singletonów. Można ich użyć do utworzenia puli połączeń, aby uzyskać dostęp do bazy danych, używając tego samego połączenia dla wszystkich klientów. Na przykład,
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(); ) )
Kiedy uruchomimy program, wynik będzie:
Jesteś teraz połączony z bazą danych.
W naszym powyższym przykładzie
- Stworzyliśmy bazę danych klasy pojedynczej.
- DbObject jest polem typu klasy. Będzie to odnosić się do obiektu klasy Database.
- Konstruktor prywatny
Database()
zapobiega tworzeniu obiektów poza klasą. - Metoda typu klasy statycznej
getInstance()
zwraca instancję klasy do świata zewnętrznego. - W klasie Main mamy zmienną typu db1. Wzywamy
getInstance()
użyciu DB1 uzyskać tylko obiekt bazy danych. getConnection()
Dostęp do metody można uzyskać tylko za pomocą obiektu bazy danych.- Ponieważ baza danych może mieć tylko jeden obiekt, wszyscy klienci mogą uzyskiwać dostęp do bazy danych za pośrednictwem jednego połączenia.
Należy zauważyć, że jest tylko kilka scenariuszy (takich jak rejestrowanie), w których pojedyncze elementy mają sens. Nawet połączenie z bazą danych zwykle nie powinno być singletonem.
Zalecamy całkowite unikanie używania singletonów, jeśli nie masz pewności, czy ich użyć, czy nie. Dowiedz się więcej: Co jest takiego złego w Singletonie?