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ác bạn ở Hà Nội có thể tham gia khóa học thứ 9 của vietjackteam (đang tuyển sinh) vào cuối tháng 10/2018 do anh Nguyễn Thanh Tuyền, admin vietjack.com trực tiếp giảng dạy tại Hà Nội. Chi tiết nội dung khóa học tham khỏa link : Khóa học Java.Các bạn học CNTT, điện tử viễn thông, đa phương tiện, điện-điện tử, toán tin có thể theo học khóa này. Số lượng các công việc Java hoặc .NET luôn gấp ít nhất 3 lần Android hoặc iOS trên thị trường tuyển dụng. Khóa online= Đi phỏng vấn, Khóa offline= Đi phỏng vấn+ 1.5 tháng thực tập ngoài doanh nghiệp.

Các bạn ở xa học không có điều kiện thời gian có thể tham dự khóa Java online để chủ động cho việc học tập. Từ tháng 4/2018, VietJack khuyến mại giá SỐC chỉ còn 250k cho khóa học, các bạn có thể trả lại tiền nếu không hài lòng về chất lượng trong 1 tháng, liên hệ facebook admin fb.com/tuyen.vietjack để thanh toán chuyển khoản hoặc thẻ điện thoại, khóa học bằng Tiếng Việt với gần 100 video, các bạn có thể chủ động bất cứ lúc nào, và xem mãi mãi. Thông tin khóa học tại Khóa học Java Online trên Udemy. Khóa học có rating 4.7/5 trên udemy từ nhận xét của các bạn học viên.

Mọi người có thể xem demo nội dung khóa học tại địa chỉ Video demo khóa học Offline

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 fanpage của team https://www.facebook.com/vietjackteam/ hoặc 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