Singleton class trong Java

Trong lập trình hướng đối tượng, một singleton clas là một class chỉ có thể có một instance được tạo ra tại một thời điểm. Sau lần đầu tiên được khởi tạo, ở những lần khởi tạo sau chúng ta vẫn sẽ nhận một tham chiếu đến instance đã khởi tạo ở lần đầu tiên. Vì vậy việc thay đổi các instance của một singleton class sẽ ảnh hưởng đến toàn bộ những nơi sử dụng biến tham chiếu đến instance này.

Để triển khai một singleton class chúng ta có các bước sau:

  1. Tạo private constructor
  2. Tạo một static method trả về object được khởi tạo từ singleton class.

Mục đích của private constructor là để ngăn chặn bên ngoài có thể tạo ra một instance mới của singleton class. Bên cạnh đó static method dùng để quản lý duy nhất một instance có thể khởi tạo từ singleton class.

class Singleton 
{ 
    // static variable single_instance of type Singleton 
    private static Singleton single_instance = null; 
  
    // variable of type String 
    public String s; 
  
    // private constructor restricted to this class itself 
    private Singleton() 
    { 
        s = "Hello I am a string part of Singleton class"; 
    } 
  
    // static method to create instance of Singleton class 
    public static Singleton getInstance() 
    { 
        if (single_instance == null) 
            single_instance = new Singleton(); 
  
        return single_instance; 
    } 
} 
  
// Driver Class 
class Main 
{ 
    public static void main(String args[]) 
    { 
        // instantiating Singleton class with variable x 
        Singleton x = Singleton.getInstance(); 
  
        // instantiating Singleton class with variable y 
        Singleton y = Singleton.getInstance(); 
  
        // instantiating Singleton class with variable z 
        Singleton z = Singleton.getInstance(); 
  
        // changing variable of instance x 
        x.s = (x.s).toUpperCase(); 
  
        System.out.println("String from x is " + x.s); 
        System.out.println("String from y is " + y.s); 
        System.out.println("String from z is " + z.s); 
        System.out.println("\n"); 
  
        // changing variable of instance z 
        z.s = (z.s).toLowerCase(); 
  
        System.out.println("String from x is " + x.s); 
        System.out.println("String from y is " + y.s); 
        System.out.println("String from z is " + z.s); 
    } 
} 

Output

String from x is HELLO I AM A STRING PART OF SINGLETON CLASS
String from y is HELLO I AM A STRING PART OF SINGLETON CLASS
String from z is HELLO I AM A STRING PART OF SINGLETON CLASS


String from x is hello i am a string part of singleton class
String from y is hello i am a string part of singleton class
String from z is hello i am a string part of singleton class

Giải thích: Lần đầu tiên chúng ta khởi tạo biến x với Singleton.getInstance(), điều này khiến nó tạo ra một Singleton instance và gán vào biến static single_instance. Trong những lần khởi tạo sau y, và z lúc này single_instance đã giữ một Singleton instane khác NULL. Do vậy nó sẽ về object này thay vì khởi tạo mới. Kết quả ba biến x,y,z đều trỏ về cùng một object đã được khởi tạo lần đầu tiên.

Sự khác nhau giữa normal class với singleton class

Sự khác biệt giữa normal class và singleton class mà chúng ta có thể thấy ngay đó là đối với normal class chúng ta sử dụng constructor để khởi tạo, trong khi đối với singleton class chúng ta sử dụng phương thức getInstance ().

Tạo một thời điểm chúng ta có thể có nhiều instance của một normal class trong khi chỉ có một instance của singleton class duy nhất.

Singleton class thường được dùng để đại diện cho một số các class có đặc thù riêng không thay đổi trong quá trình ứng dụng chạy ví dụ như các hàm chuyển đổi từ string sang định dạng Date trong Java và ngược lại, các Mapper class dùng dể convert từ DTO sang entity và ngược lại trong các ứng dụng web, v.v

 

Nguồn tham khảo

https://www.geeksforgeeks.org/singleton-class-java/

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x