Mô hình thiết kế Singleton là gì?

Mẫu singleton là một trong những mẫu thiết kế đơn giản hơn. Một lớp sử dụng mẫu thiết kế singleton có một thể hiện duy nhất mà nó tự quản lý. Lớp này ngăn không cho bất kỳ lớp nào khác tạo một thể hiện của nó.
Một lớp singleton cũng cung cấp một điểm truy cập toàn cục duy nhất cho cá thể mà nó tạo ra. Vì vậy, bất kỳ lớp nào muốn có một thể hiện của lớp singleton, cần phải truy cập nó thông qua một điểm truy cập duy nhất của nó.
Java hỗ trợ tuyệt vời cho lập trình hướng đối tượng giúp bạn dễ dàng sử dụng mẫu thiết kế singleton.
Mục Lục
Triển khai mô hình Singleton bằng Java
Có nhiều cách để triển khai mô hình singleton trong Java; cách tiếp cận háo hức và lười biếng là những biến thể phổ biến. Mỗi cách tiếp cận này đều có những ưu điểm và nhược điểm riêng. Do đó, phương pháp bạn chọn để tuyển dụng nên phụ thuộc vào cách ứng dụng của bạn sẽ hoạt động.
Phương pháp tiếp cận háo hức
Việc triển khai mô hình singleton với cách tiếp cận háo hức có nghĩa là lớp tạo ra một thể hiện mới của chính nó khi nó tải.
public class EagerSingleton {
private static EagerSingleton instance = new EagerSingleton();private EagerSingleton() {}
public static EagerSingleton getInstance() {
return instance;
}
}
Các Háo hứcSingleton Lớp Java tạo ra một thể hiện mới của chính nó khi nó tải. Nó chỉ định trường hợp này cho tĩnh riêng tư biến cá thể, chỉ có thể truy cập trong lớp singleton. Điểm duy nhất của quyền truy cập bên ngoài vào biến cá thể là thông qua getInstance () phương pháp. Phương thức đó trả về thể hiện đã tạo trước đó của lớp.
Cách tiếp cận này rất tốt vì nó ngăn chặn được vấn đề đa luồng, một trong những thách thức lớn nhất của mô hình singleton. Nó giải quyết vấn đề đa luồng bằng cách tạo một thể hiện mới của chính nó trước khi bất kỳ luồng mới nào có thể truy cập vào biến thể hiện của nó. Điều này đảm bảo rằng mỗi luồng sẽ chỉ có quyền truy cập vào cùng một phiên bản.
Tuy nhiên, cách tiếp cận háo hức chỉ thực tế nếu ứng dụng của bạn sẽ sử dụng một thể hiện của lớp singleton khi nó bắt đầu chạy. Nếu không, bạn sẽ tạo một đối tượng trước khi ứng dụng của bạn cần nó, sử dụng tài nguyên một cách không cần thiết.
Phương pháp tiếp cận lười biếng
Cách tiếp cận lười biếng là giải pháp cho vấn đề tiếp cận háo hức. Nó cho phép bạn tạo một thể hiện mới của một lớp singleton chỉ khi chương trình của bạn cần nó.
public class LazySingleton {
private volatile static LazySingleton instance;private LazySingleton() {}
public static LazySingleton getInstance() {
if (instance == null) {
synchronized (LazySingleton.class) {
if (instance == null) {
instance = new LazySingleton();
}
}
}
return instance;
}
}
Cách tiếp cận lười biếng giải quyết vấn đề đa luồng bằng cách sử dụng đồng bộ từ khóa. Điều này ngăn không cho hai luồng truy cập vào biến cá thể cùng một lúc. Tuy nhiên, đồng bộ hóa rất tốn kém, vì vậy ứng dụng chỉ sử dụng nó một lần, khi lần đầu tiên nó gọi getInstance ().
Khi nào sử dụng mẫu Singleton
Mẫu Singleton hữu ích trong nhiều trường hợp, để tạo hộp thoại, xử lý cài đặt đăng ký hoặc quản lý nhóm luồng.
Một cách sử dụng phổ biến khác cho mẫu singleton là tạo một lớp trung tâm quản lý các kết nối cơ sở dữ liệu.