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"); } }
Đâ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
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 doanh nghiệp với Java. Khóa học có giá chỉ 400K, 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 chị Thu, trợ lý anh Tuyền để hỗ trợ thanh toán qua mã QR ngân hàng Việt Nam, fb: https://www.facebook.com/Thule.59
Anh Tuyền, tác giả khóa học, là cựu sinh viên chương trình đào tạo kĩ sư tài năng của đại học Bách Khoa Hà Nội với hơn 5 năm kinh nghiệm đi làm thực tế doanh nghiệp và cũng là Founder website vietjack.com, web giáo dục phổ biến nhất Việt Nam hiện tại (năm 2024). Java cũng là ngôn ngữ lập trình dễ đi xin việc nhất hiện tại, với mức lương cao, hãy nâng cao kiến thức IT của bản thân mình vì một Việt Nam giàu mạnh.
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
Bài học Java phổ biến tại vietjack.com: