Lớp Singleton trong Java là một lớp chỉ có thể có một đối tượng (một thể hiện của lớp) tại một thời điểm nhất định. Trong bài viết này, chúng ta sẽ cùng tìm hiểu về lớp Singleton và cách áp dụng nó trong Java cùng với sự trợ giúp của các ví dụ dẫn chứng.
Singleton trong Java
Singleton là một mẫu thiết kế, không phải là một tính năng dành riêng cho Java. Nó đảm bảo rằng chỉ có một thể hiện của một lớp được tạo. Một mẫu thiết kế giống như các thư viện bao gồm các kỹ thuật viết đoạn mã khác nhau được chia sẻ bởi các lập trình viên trên khắp thế giới.
Sau đây là cách chúng ta có thể sử dụng các Singleton trong Java.
- Tạo một phương thức khởi tạo riêng nhằm ngăn việc tạo một đối tượng bên ngoài lớp
- Tạo một thuộc tính riêng tư tham chiếu đến đối tượng Singleton.
- Tạo một phương thức tĩnh công khai cho phép tạo và truy cập đối tượng đã được tạo. Bên trong phương thức, chúng ta sẽ tạo một điều kiện nhằm ngăn việc tạo nhiều hơn một đối tượng.
Ví dụ:
1 2 3 4 5 6 7 8 9 |
class single { private static single obj; private single() { //Đoạn mã } public static single getObj() { //Đoạn mã } } |
Trong đoạn mã trên:
- private static single obj là một tham chiếu đến đối tượng của lớp
- private single() là một hàm tạo riêng tư nhằm ngăn việc tạo một đối tượng bên ngoài lớp
- public static single getObj() trả vê tham chiếu của đối tượng duy nhất trong một lớp. Vì đây là phương thức kiểu static, do đó nó có thể được gọi bằng tên lớp.
Cách sử dụng lớp Singleton
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 tập hợp các kết nối để truy cập cơ sở dữ liệu trong khi sử dụng lại cùng kết nối cho tất cả các máy khách.
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class co_so_du_lieu { private static co_so_du_lieu obj; private co_so_du_lieu() { } public static co_so_du_lieu lay_doi_tuong() { if(obj == null) { obj = new co_so_du_lieu(); } return obj; } public void lay_ket_noi() { System.out.println("Da ket noi toi co so du lieu!"); } } class Main { public static void main(String[] args) { co_so_du_lieu obj1; obj1= co_so_du_lieu.lay_doi_tuong(); obj1.lay_ket_noi(); } } |
Kết quả:
1 |
Da ket noi toi co so du lieu! |
Trong ví dụ trên:
- Chúng ta đã tạo một lớp singleton có tên là co_so_du_lieu.
- obj là một trường của lớp. Nó sẽ tham chiếu đến đối tượng của lớp co_so_du_lieu.
- Phương thức khởi tạo private co_so_du_lieu () sẽ ngăn cản việc tạo đối tượng bên ngoài lớp.
- Phương thức tĩnh lay_doi_tuong () sẽ trả về thể hiện của lớp cho phạm vi bên ngoài.
- Trong lớp Main, chúng ta sử dụng biến obj1. Chúng ta sẽ thực hiện gọi lay_doi_tuong () bằng cách sử dụng obj1 để lấy đối tượng duy nhất của lớp co_so_du_lieu.
- Phương thức lay_ket_noi () chỉ có thể được truy cập bằng đối tượng của lớp co_so_du_lieu.
- Vì lớp co_so_du_lieu chỉ có thể có một đối tượng duy nhất nên tất cả các máy khách có thể truy cập vào trong cơ sở dữ liệu thông qua một kết nối duy nhất.
Chú ý: Điều quan trọng cần lưu ý là chỉ có một số trường hợp như ghi nhật ký hay ghi log mà các singleton thực sự đạt hiệu quả. Ngay cả một kết nối tới cơ sở dữ liệu thường sẽ không phải là một singleton. Nên tránh sử dụng singleton nếu ta không chắc chắn về việc sử dụng nó.
Trên đây là khái niệm và ví dụ cơ bản về Singleton trong Java. Hy vọng mọi người có thể áp dụng vào trong chương trình của mình. Mọi người hãy tiếp tục theo dõi các bài tiếp theo và cập nhật các bài mới nhất trên tek4 nhé!
P/s: Cảm ơn mọi người!