Singleton Pattern là một trong những mẫu thiết kế thuộc nhóm Creational Patterns (mẫu khởi tạo). Mục tiêu của mẫu này là đảm bảo rằng chỉ có một thể hiện (instance) của một lớp tồn tại trong toàn bộ ứng dụng và cung cấp một điểm truy cập toàn cầu đến thể hiện đó.
Dưới đây là một cách triển khai phổ biến của Singleton Pattern trong Java. Triển khai này sử dụng Lazy Initialization để đảm bảo rằng thể hiện chỉ được tạo ra khi nó thực sự cần thiết, và cũng đảm bảo an toàn trong môi trường đa luồng.
public class Singleton { // Biến thể hiện duy nhất private static Singleton instance; // Constructor riêng tư để ngăn tạo thể hiện bên ngoài private Singleton() { // Khởi tạo các thuộc tính của đối tượng nếu cần } // Phương thức để lấy thể hiện duy nhất public static synchronized Singleton getInstance() { // Nếu thể hiện chưa được tạo, tạo mới if (instance == null) { instance = new Singleton(); } return instance; } // Phương thức khác trong lớp public void someMethod() { // Thực hiện một số hành động System.out.println("Doing something in Singleton!"); } }
public class Main { public static void main(String[] args) { // Lấy thể hiện duy nhất của Singleton Singleton singleton = Singleton.getInstance(); // Gọi phương thức của đối tượng singleton.someMethod(); } }
instance
được khai báo để lưu trữ thể hiện duy nhất của lớp.getInstance()
: Phương thức này kiểm tra xem thể hiện đã được tạo chưa. Nếu chưa, nó sẽ tạo một thể hiện mới. Phương thức này được đồng bộ hóa (synchronized
) để đảm bảo an toàn khi truy cập từ nhiều luồng.main
, bạn có thể lấy thể hiện duy nhất và gọi các phương thức của nó.getInstance()
đồng thời, việc đồng bộ hóa phương thức giúp tránh việc tạo ra nhiều thể hiện.Singleton Pattern là một mẫu thiết kế quan trọng trong lập trình hướng đối tượng, giúp kiểm soát việc khởi tạo các thể hiện của một lớp và cung cấp một cách dễ dàng để truy cập vào thể hiện duy nhất đó. Việc sử dụng Singleton Pattern có thể giúp bạn quản lý tài nguyên hiệu quả hơn và duy trì tính nhất quán trong toàn bộ ứng dụng.