Lớp Singleton trong Java



Mục đích của Singleton là để kiểm soát việc tạo ra đối tượng, giới hạn số lượng đối tượng tạo ra là chỉ một. Giống như các trường static, chỉ có một trường Singleton xuất hiện cho mỗi lớp. Các Singleton thường kiểm soát sự truy cập tới nguồn như kết nối database hoặc socket.

Ví dụ, nếu bạn được phép có một kết nối tới database hoặc JDBC driver mà có vấn đề về đa luồng (multithreading), thì Singleton bảo đảm rằng chỉ có duy nhất một kết nối được tạo ra hoặc chỉ có một thread có thể truy cập kết nối đó tại một thời điểm.

Triển khai Singleton trong Java

Ví dụ 1

Sự triển khai đơn giản nhất gồm một private constructor và một trường để giữ kết quả, và một phương thức static accessor với tên như getInstance().

Trường private có thể được gán từ trong một khối khởi chạy tĩnh (static initializer), hoặc đơn giản hơn, bạn sử dụng một initializer. Phương thức getInstance() (mà phải là public) sau đó trả về instance này.

// TenFile: Singleton.java
public class Singleton {

   private static Singleton singleton = new Singleton( );
   
   /* Mot private Constructor de ngan can bat cu 
    * lop nao khac khoi tao.
    */
   private Singleton(){ }
   
   /* Phuong thuc static 'instance' */
   public static Singleton getInstance( ) {
      return singleton;
   }
   /* Cac phuong thuc protected khac */
   protected static void demoMethod( ) {
      System.out.println("demoMethod cho singleton"); 
   }
}
Quảng cáo

Đây là file chứa chương trình chính, chúng ta sẽ tạo đối tượng singleton:

// TenFile: SingletonDemo.java
public class SingletonDemo {
   public static void main(String[] args) {
      Singleton tmp = Singleton.getInstance( );
      tmp.demoMethod( );
   }
}

Nó sẽ cho kết quả:

demoMethod for singleton
Quảng cáo

Ví dụ 2

Sự triển khai sau minh họa một mẫu thiết kế ClassicSingleton trong Java:

public class ClassicSingleton {

   private static ClassicSingleton instance = null;
   protected ClassicSingleton() {
   }
   public static ClassicSingleton getInstance() {
      if(instance == null) {
         instance = new ClassicSingleton();
      }
      return instance;
   }
}

Lớp ClassicSingleton duy trì một tham chiếu static tới singleton bơ vơ và trả về tham chiếu đó từ phương thức static getInstance().

Ở đây, lớp ClassicSingleton thuê một kỹ thuật, mà được biết đến như là lazy instantiation, để tạo singleton; kết quả là, singleton không được tạo tới khi phương thức getInstance() được gọi lần đầu tiên. Kỹ thuật này bảo đảm rằng các singleton chỉ được tạo khi cần thiết.

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack

Loạt bài hướng dẫn của chúng tôi dựa một phần trên nguồn tài liệu của: Tutorialspoint.com

Follow facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.



lop_va_doi_tuong_trong_java.jsp

Tài liệu giáo viên