Singleton Pattern

DSCF5909.jpg
Phuong Vo
Đăng ngày 21 tháng 12, 2023

Singletons là các class được khởi tạo một lần và có thể được truy cập trên toàn ứng dụng. Phiên bản duy nhất này có thể được chia sẻ trong toàn bộ ứng dụng của chúng ta, điều này khiến Singletons trở nên hiệu quả trong việc quản lý trạng thái chung của một ứng dụng.

Thiết kế Singleton là gì?
Ví dụ một Singleton
Ưu và nhược điểm của Singleton
Kết luận
Singleton Pattern

Thiết kế Singleton là gì?

Singleton là một mẫu thiết kế cho chúng ta biết rằng chúng ta chỉ có thể tạo một phiên bản của một lớp và phiên bản đó có thể được truy cập trên toàn cầu.

Vì vậy, một class singleton phải có các đặc điểm sau đây:

  • Đảm bảo rằng nó chỉ tạo một instance của class.
  • Cung cấp một điểm truy cập chung cho ứng dụng.
  • Đảm bảo rằng instance đó chỉ được tạo lần đầu tiên.

Ví dụ một Singleton

Cho một ví dụ, chúng ta sẽ xây dựng một lớp dùng để lưu trữ, xử lý thông tin liên quan tới đường dẫn của một dự án web.

  • một biến làm kho lưu trữ.
  • hàm để thêm một với cho vào .
  • hàm để lấy đường dẫn cụ thể nào đó.

Tạo một file với đoạn mã sau:


Chú ý chúng ta dùng để đóng băng instance store lại, để tránh việc thêm hoặc sửa đổi các thuộc tính trên phiên bản bị đóng băng, điều này sẽ giảm nguy cơ ghi đè lên instance store (Singleton).

Bây giờ chúng ta hãy xem qua cách sử dụng của RouteStore trong dự án.

Lấy một ví dụ chúng ta sẽ có một dự án sử dụng NextJS, chúng ta sẽ đưa đoạn mã sau vào RouteProvider.ts (RouteProvider sẽ bao lớp ngoài cùng của dự án).


Khi đó tại bì các component con nào muốn của các ruleName là thì ta thực hiện như sau:


Như vậy, việc chúng ta thêm thì giá trị sẽ được thêm giá trị vào trong và chúng ta có thể ở bất kỳ đâu để có thể truy suất dữ liệu ngay cả khi được gọi ở các tệp khác nhau.

Ưu và nhược điểm của mẫu thiết kế Singleton

Ưu điểm:

  • Một mẫu thiết kế đơn giản, dễ thực hiện.
  • Nó đảm bảo rằng chỉ có một phiên bản duy nhất của class được tạo, điều này giúp tiết kiệm được bộ nhớ hơn, thay vì phải tạo ra nhiều instance tương tự.
  • Dễ dàng truy suất dữ liệu ở mọi nơi trong dự án.

Bất lợi

  • Tăng phụ thuộc vì mọi nơi đều chia sẻ cùng một instance.
  • Khó kiểm thử và bảo trì khi độ phủ của Singleton cao.
  • Riêng đối với JavaScript thì trong nhiều trường hợp chỉ cần tạo một object thông thường cũng có kết quả tương tự mà không cần sử dụng Singleton.

Kết luận

Tóm lại thì Singleton là giới hạn số Lượng phiên bản của một đối tượng cụ thể chỉ còn một. Trường hợp duy nhất này được gọi là singleton.

Trong khi Singleton có những ưu điểm của sự đơn giản và dễ sử dụng, nhưng cũng đi kèm với những hạn chế và phải được sử dụng cẩn thận. Trong React, các công cụ quản lý state như Redux, Recoil, hoặc React Context thường được ưa chuộng hơn để quản lý dữ liệu toàn cục một cách an toàn và kiểm soát hơn.

Tuy nhiên, việc lựa chọn mẫu thiết kế nào và cách triển khai phụ thuộc vào yêu cầu cụ thể của dự án và sự thuận tiện của người phát triển.

Thiết kế Singleton là gì?
Ví dụ một Singleton
Ưu và nhược điểm của Singleton
Kết luận