Design Pattern: Singleton pattern
Bài đăng này đã không được cập nhật trong 3 năm
Singleton là một Design pattern rất hay được sử dụng trong thực tế. Tuy nhiên cách phát triển khai nó trong Java một cách hiệu quả thì không phải ai cũng nắm được. 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.
A. Định nghĩa và ưu nhược điểm
1. Định nghĩa
Trong design pattern, mẫu thiết kế Singleton Pattern được dùng để đảm bảo chỉ có duy nhất một instance trong một class, và class đó sẽ cung cấp phương thức toàn cục để truy cập đến thực thể đó. Như vậy, Singleton Pattern được dùng khi bạn tạo ra một class mà bạn chỉ muốn chỉ có duy nhất một thực thể là instance của class đó và bạn có thể truy cập đến nó ở bất kỳ nơi đâu khi bạn muốn.
2. Cấu trúc của một Singleton
3. Ưu điểm
- Chỉ tồn tại duy nhất 1 Instance của class Singleton được tạo ra trong suốt chương trình ( chỉ có duy nhất một instance trong một class.)
- Ẩn constructor của class. ( Các constructor ẩn đảm bảo rằng các singleton class không bao giờ có thể được instantiated từ bên ngoài )
- Ý tưởng chính trong mô hình này là làm cho lớp đó chịu trách nhiệm kiểm soát sự khởi tạo của nó (nó chỉ được khởi tạo một lần).
- Cung cấp việc truy cập vào Object global : + Loại bỏ các biến ko cần thiết, chỉ quản lý các biến ứng dụng cần dùng tới. + Singleton sẻ chỉ sử dụng một số ít tài nguyên, còn biến toàn cầu thì thường được tạo từ nhều ngôn ngữ / kiểu dữ liệu phức tạp nên tiêu tốn tài nguyên hơn.
4. Nhược điểm:
- Khó triển khai 1 cách hiệu quả để đảm bảo rằng chỉ 1 class chỉ có 1 đối tượng.
- Khó khăn trong việc kiểm soát sự hiện thân của nó.
- Hạn chế số lượng các instance của một class.
- 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.
B. Triển khai:
1. Các bước triển khai:
Bước 1:
Cung cấp một thuộc tính (attribute) có tên là instance, có kiểu trả về (return type) là Singleton và phương thức là private static
Bước 2:
Tạo ra một phương thức có tên là getInstance, có phương thức truy cập (accessor function) là public static, kiểu trả về sẽ là một tham chiếu đến thuộc tính instance.
Bước 3:
Thực hiện “lazy initialization” trong phương thức truy cập (accessor function)
Bước 4:
Định nghĩa tất cả các constructor có phương thức truy cập là protected hoặc private
Bước 5:
Client sẽ gọi đối tượng Singleton và truy cập vào phương thức getInstance(). Trong trường hợp đối tượng Singleton này chưa được khởi tạo từ trước, thì nó sẽ tiến hành tạo mới đối tượng. Ngược lại sẽ trả về Singleton đã có từ trước
2. Tổng kết:
Như vậy, trong nhiều trường hợp, để giải quyết vấn đề sử dụng chung cùng tài nguyên cho một mục đích chung như đọc, ghi file log, database thì Singleton Pattern là một giải pháp tuyệt vời để lựa chọn. Một số design pattern khác cũng sử dụng Singleton để triển khai: Factory, Abstract Factory … Link tham khảo: https://en.wikipedia.org/wiki/Singleton_pattern http://literatejava.com/jvm/fastest-threadsafe-singleton-jvm/
All rights reserved