Singleton pattern
Trong công nghiệp phần mềm, mô hình Singleton là một mẫu thiết kế phần mềm để hạn chế sự khởi tạo của lớp đối tượng. Điều này rất hữu ích khi cần một đối tượng chính xác để điều phối hành động trên toàn hệ thống. Khái niệm đôi khi được khái quát hóa cho các hệ thống vận hành hiệu quả hơn khi chỉ có một đối tượng tồn tại hoặc hạn chế sự khởi tạo cho một số lượng đối tượng nhất định. Thuật ngữ này xuất phát từ khái niệm toán học của một singleton. Có một số người chỉ trích mô hình Singleton và xem nó là một mô hình chống lại hướng đối tượng bởi vì nó thường được sử dụng trong các kịch bản mà nó không có lợi, ví dụ như các hạn chế không cần thiết trong tình huống mà một trường hợp duy nhất của một class không thực sự cần thiết, Và đưa ra đối tượng chung vào một ứng dụng. Mẫu thiết kế Singleton [4] là một trong 23 mô hình thiết kế GoF nổi tiếng mô tả cách giải quyết các vấn đề thiết kế lặp lại để thiết kế linh hoạt và phần mềm hướng đối tượng dùng lại được, tức là các đối tượng dễ triển khai, thay đổi, Thử nghiệm và sử dụng lại. Các mô hình Singleton thiết kế giải quyết vấn đề như: [5]
Mẫu thiết kế Singleton mô tả cách giải quyết những vấn đề như:
Sử dụng chungabstract factory, builder, và prototype patterns có thể sử dụng Singletons trong quá trình thực hiện. Facade thường sử dụng singleton. Singleton thường được dùng quản lý biến toàn cục. Singleton thường được ưa thích hơn các biến số toàn cục bởi vì:
Nơi để sử dụng nóKhi chỉ cho phép một trường hợp hoặc một số trường hợp cụ thể của một lớp. Các đối tượng Facade thường là những Singleton bởi vì ứng dụng luôn chỉ cần một đối tượng Facade. Thực hiệnViệc thực hiện mô hình Singleton phải:
Cá thể thường được lưu trữ dưới dạng một biến tĩnh riêng; Object được tạo ra khi biến được khởi tạo, tại một số điểm trước khi phương pháp tĩnh được gọi lần đầu tiên. Sau đây là một ví dụ được viết bằng Java. public final class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
Lazy initialization Một singleton thực hiện có thể sử dụng khởi tạo đa luồng, nơi dụ được tạo ra khi phương pháp tĩnh được gọi lần đầu tiên. Nếu phương pháp tĩnh có thể được gọi từ nhiều luồng đồng thời, cần phải có các biện pháp để ngăn ngừa các điều kiện có thể dẫn đến việc tạo ra nhiều trường hợp của lớp. Sau đây là một mẫu thực hiện an toàn, sử dụng khởi tạo chắc chắn với khóa kiểm tra kép, được viết bằng Java: public final class Singleton {
private static volatile Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized(Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
Tham khảo |
Portal di Ensiklopedia Dunia