Lớp Java Singleton

Trong hướng dẫn này, chúng ta sẽ học cách triển khai Singleton Design Pattern trong Java với sự trợ giúp của các ví dụ.

Trong Java, Singleton là một mẫu thiết kế đảm bảo rằng một lớp chỉ có thể có một đối tượng.

Để tạo một lớp singleton, một lớp phải triển khai các thuộc tính sau:

  • Tạo một phương thức khởi tạo riêng của lớp để hạn chế việc tạo đối tượng bên ngoài lớp.
  • Tạo một thuộc tính private của loại lớp tham chiếu đến một đối tượng.
  • Tạo một phương thức tĩnh công khai cho phép chúng ta tạo và truy cập đối tượng mà chúng ta đã tạo. Bên trong phương thức, chúng ta sẽ tạo một điều kiện hạn chế chúng ta tạo nhiều hơn một đối tượng.

Ví dụ: Cú pháp lớp Java Singleton

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

Trong ví dụ trên,

  • private static SingletonExample singleObject – một tham chiếu đến đối tượng của lớp
  • private SingletonExample() – một phương thức khởi tạo riêng hạn chế việc tạo các đối tượng bên ngoài lớp.
  • public static SingletonExample getInstance() – phương thức này trả về tham chiếu đến đối tượng duy nhất của lớp. Vì phương thức static, nó có thể được truy cập bằng cách sử dụng tên lớp.

Sử dụng Singleton trong Java

Singletons có thể được sử dụng trong khi làm việc với cơ sở dữ liệu. Chúng có thể được sử dụng để tạo một nhóm kết nối để truy cập cơ sở dữ liệu trong khi sử dụng lại cùng một kết nối cho tất cả các máy khách. Ví dụ,

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

Khi chúng tôi chạy chương trình, kết quả đầu ra sẽ là:

You are now connected to the database.

Trong ví dụ trên của chúng tôi,

  • Chúng tôi đã tạo một Cơ sở dữ liệu lớp singleton.
  • DbObject là một trường kiểu lớp. Điều này sẽ tham chiếu đến đối tượng của Cơ sở dữ liệu lớp.
  • Cơ sở dữ liệu phương thức khởi tạo riêng () ngăn cản việc tạo đối tượng bên ngoài lớp.
  • Phương thức kiểu lớp tĩnh getInstance () trả về thể hiện của lớp ra thế giới bên ngoài.
  • Trong lớp Chính, chúng ta có biến kiểu lớp db1. Chúng tôi đang gọi getInstance () bằng cách sử dụng db1 để lấy đối tượng duy nhất của Cơ sở dữ liệu.
  • Phương thức getConnection () chỉ có thể được truy cập bằng đối tượng của Cơ sở dữ liệu.
  • Vì Cơ sở dữ liệu chỉ có thể có một đối tượng, nên tất cả các máy khách có thể truy cập cơ sở dữ liệu thông qua một kết nối duy nhất.

Singleton là một mẫu thiết kế chứ không phải là một tính năng dành riêng cho Java. Một mẫu thiết kế giống như thư viện mã của chúng tôi bao gồm các kỹ thuật mã hóa khác nhau được chia sẻ bởi các lập trình viên trên khắp thế giới.

Điều quan trọng cần lưu ý là, chỉ có một số trường hợp (như ghi nhật ký) mà các singlelet có ý nghĩa. Chúng tôi khuyên bạn nên tránh sử dụng singleton hoàn toàn nếu bạn không chắc chắn có nên sử dụng chúng hay không. Tìm hiểu thêm: Điều gì tồi tệ về Singleton?









Gõ tìm kiếm nhanh...