Singleton là gì? Ưu điểm và nhược điểm của Singleton

Nguồn bài viết: Singleton là gì? Ưu điểm và nhược điểm của Singleton
Khi học viết mã và hướng tới mục tiêu trở thành một lập trình viên chuyên nghiệp, bạn sẽ phải làm việc với các Mẫu thiết kế. Đặc biệt, Mẫu thiết kế Singleton là một trong những Mẫu thiết kế rất dễ hiểu và nên học trước khi tìm hiểu các Mẫu thiết kế khác. Vậy, Singleton là gì? Ưu điểm và nhược điểm của Singleton là gì? Tất cả sẽ được thuthuatkiemtien.com giải đáp trong bài viết.
Tìm hiểu về Singleton
Ghi chú: Nội dung bài viết sẽ tập trung giới thiệu về Singleton Design Pattern để bạn dễ hiểu nhất và nêu bật được giá trị của Design Pattern này. Nếu bạn đang tìm cách triển khai Singleton trong một dự án hoặc một ngôn ngữ lập trình, bạn nên tìm kiếm với các từ khóa như: “Singleton + ngôn ngữ lập trình” ví dụ: Java Singleton example, Spring Boot singleton example, … để biết thêm chi tiết nội dung về mã!
Singletons là gì?
Singleton là một Mẫu thiết kế thuộc nhóm Mẫu thiết kế sáng tạo cùng với Mẫu nhà máy trừu tượng. Bạn có thể hiểu một cách đơn giản rằng: Singleton là một Mẫu thiết kế đảm bảo rằng mỗi lớp sẽ chỉ có một thể hiện và cung cấp một điểm truy cập toàn cục cho thể hiện này.
Để hiểu rõ hơn về Singleton, bạn sẽ cần đọc qua SOLID là gì? 5 nguyên tắc của SOLID! Bởi vì, Singleton sẽ giải quyết hai vấn đề trong Nguyên tắc trách nhiệm đơn lẻ – SOLID Single Responsibility Principle! Hai vấn đề đó bao gồm:
- Mỗi lớp chỉ có một thể hiện.
- Phiên bản cần cung cấp một điểm truy cập chung hoặc bạn có thể truy cập phiên bản đó ở bất kỳ đâu.

Tại sao sử dụng Singleton?
Ví dụ: để tạo một ứng dụng trình phát nhạc, để bật và tắt nhạc, bạn sẽ khởi tạo 2 phiên bản: 1 cho “bật” và 1 cho “tắt”. Điều này sẽ dẫn đến tình trạng hai trường hợp không liên quan không thể hoạt động thay thế cho nhau. Vì vậy, đặt cược tốt nhất của bạn là khởi tạo một phiên bản để bật và tắt nhạc. Singleton là giải pháp bạn cần khi:
- Bạn có thể đặt phương thức khởi tạo ở chế độ riêng tư và không được sử dụng bởi các lớp khác Mới với lớp Singleton.
- Sử dụng phương thức static để khởi tạo Singleton, tất cả các lệnh gọi đến phương thức này sẽ được trả về cache.
Nếu mã của bạn có quyền truy cập vào lớp Singleton, điều đó có nghĩa là bạn có thể gọi phương thức tĩnh của Singleton. Bất cứ khi nào bạn làm như vậy, cùng một đối tượng được trả về. Vậy là vấn đề của bạn đã được giải quyết! Thật là tiện lợi phải không?
Ví dụ về Singleton
thuthuatkiemtien.com sẽ lấy một ví dụ từ thực tế! Ví dụ thực tế nhất để minh họa Mô hình thiết kế Singleton là bộ máy Chính phủ. Một quốc gia chỉ có 1 Chính phủ chính thức có nghĩa là “Chính phủ X” là điểm truy cập duy nhất và được xác định rõ ràng.

Ưu điểm và nhược điểm của Singleton
Tiếp theo, chúng ta cùng tìm hiểu về ưu nhược điểm của Singleton nhé!
Ưu điểm của Singleton
Ba ưu điểm nổi bật nhất của Singleton là đặc điểm đã được chúng tôi đề cập nhiều lần trong bài viết, đó là:
- Bạn có thể chắc chắn rằng mỗi lớp chỉ có một thể hiện.
- Bạn có thể truy cập phiên bản ở bất kỳ đâu và bất kỳ lúc nào
- Singletons chỉ khởi tạo khi bạn gọi chúng lần đầu tiên (gọi khi khởi tạo sau đó).

Nhược điểm của Singleton
Tuy nhiên, Singleton cũng có rất nhiều nhược điểm, và đặc biệt những nhược điểm này sẽ bộc lộ rất rõ ràng, ảnh hưởng rất lớn nếu bạn làm một dự án lớn như:
- Vi phạm các quy tắc Nguyên tắc Trách nhiệm Đơn lẻ – nguyên tắc nhiệm vụ duy nhất, Một mẫu giải quyết hai vấn đề cùng một lúc.
- Mẫu Singleton có thể che giấu thiết kế xấu đối với các trường hợp khi các thành phần trong chương trình biết rõ về nhau.
- Singleton yêu cầu xử lý đặc biệt trong trường đa luồng, để nhiều luồng không tạo một đối tượng Singleton nhiều hơn một lần.
- Singleton thường được các lập trình viên lâu năm coi là “Ác ma”, vì Singleton tạo ra quá nhiều phụ thuộc, không thể sử dụng tính đa hình và dễ dàng tạo ra bug khiến họ phải debug “cả đêm”.
Singleton có rất nhiều mặt trái thực sự đáng lo ngại. Vì vậy, trước khi thực hiện Singleton, bạn nên cân nhắc và lưu ý những nhược điểm của Singleton nhé!
Hướng dẫn triển khai Singleton
Quy trình thực hiện Singleton
Chúng ta sẽ có 5 bước chính để triển khai Singleton bao gồm:
- Định nghĩa thuộc tính tĩnh riêng tư trong lớp “trường hợp đơn lẻ”
- Định nghĩa hàm tĩnh công khai trong một lớp học
- Biểu diễn “Khởi tạo lười biếng” cho lần sử dụng đầu tiên trong chức năng được truy cập.
- Định nghĩa các hàm là được được bảo vệ hoặc là riêng.
- Máy khách chỉ có thể sử dụng chức năng để truy cập và thao tác với Singleton.
Hình là một mã ví dụ về triển khai Singleton trong Spring

Quy tắc ngón tay cái
Khi sử dụng Singleton, bạn cần ghi nhớ thêm một số quy tắc:
- Bạn có thể sử dụng Singleton trong việc triển khai Abstract Factory, Builder và Prototype.
- Đối tượng Facade là Singleton vì chỉ cần 1 đối tượng Facade.
- Đối tượng trạng thái thường là các Singleton.
- Lợi thế của việc có thể truy cập một Singleton là: bạn có thể chắc chắn về số lượng các trường hợp sử dụng Singleton; bạn có thể thay đổi ý định hoặc quản lý số lượng trong bất kỳ trường hợp nào.
- Singleton là một trong những Design Pattern bị “ghét” nhất vì các nhà thiết kế sử dụng Singleton để thay thế biến toàn cục là sai!
- Singleton chỉ có thể được sử dụng khi mỗi lớp có một cá thể duy nhất.
- Khi nào thì thích hợp để gọi một Singleton? Câu trả lời là: chuyển đổi tài nguyên đối tượng làm tham chiếu đến các đối tượng đơn giản hơn là truy cập tài nguyên bất cứ lúc nào và ở đâu.
Như vậy chúng ta đã tìm hiểu qua Singleton là gì, ưu nhược điểm của Singleton và quy trình thực hiện Singleton. thuthuatkiemtien.com hy vọng những kiến thức trong bài viết này có thể hỗ trợ bạn trong việc bắt đầu và tìm hiểu sâu hơn về Design Pattern nói chung và Singleton Design Pattern nói riêng. Chúc bạn sẽ trở thành một lập trình viên chuyên nghiệp trong tương lai và có nhiều thăng tiến trong sự nghiệp.
Bài viết có tham khảo từ: Refactoring.Guru, SourceMaking, TopDev, freeCodeCamp, CodeLearn, …
Câu hỏi thường gặp về Singleton
Có bắt buộc phải học về Mẫu thiết kế không?
Không phải, nếu bạn muốn trở thành một lập trình viên bình thường như bao người khác và thiết kế các dự án cá nhân vừa và nhỏ không yêu cầu nhiều quy tắc phát triển nhóm.
Đúng, nếu bạn đang hướng tới mục tiêu trở thành một lập trình viên chuyên nghiệp có thể tham gia vào các dự án lớn, thì cần phải có một bộ quy tắc chung để làm việc với nhiều người. Tất nhiên, vừa có kiến thức vừa có thực hành tốt thì bạn sẽ ghi điểm cao hơn trong mắt nhà tuyển dụng.
Tôi nên bắt đầu sử dụng Singleton như thế nào?
Bạn nên bắt đầu với một vài ý tưởng chính trước khi triển khai Singleton:
- Đảm bảo rằng lớp của bạn chỉ có 1 phiên bản
- Đảm bảo bạn có thể truy cập lớp học đó mọi lúc, mọi nơi
- Lớp của bạn phải khởi tạo ở lần gọi đầu tiên hoặc chỉ trong thời gian
Tìm hiểu thêm về Singleton và Design Pattern ở đâu?
Nếu muốn tìm hiểu thêm về Design Pattern, bạn có thể học miễn phí tại 2 nguồn tiếng Anh nổi tiếng:
Refactoring.Guru – một trang chuyên cung cấp tài liệu về refactoring, design pattern, SOLID,… rất phổ biến.
SourceMaking – họ tập trung khai thác và cung cấp những kiến thức về Design Pattern khá dễ hiểu.
Singleton có thể được sử dụng với ngôn ngữ lập trình nào?
Bạn có thể hiểu chung chung Design Pattern là một mẫu thiết kế phần mềm. Do đó, bạn có thể sử dụng Design Pattern và Singleton Design Pattern bằng bất kỳ ngôn ngữ nào, ví dụ: Java, C #, C ++, PHP, Python, Ruby, TypeScript, Golang, v.v.
CÔNG TY CỔ PHẦN TẬP ĐOÀN TINO
- Trụ sở chính: L17-11, Lầu 17, Tòa nhà Vincom Center, Số 72 Lê Thánh Tôn, P. Bến Nghé, Q.1, TP.
VPĐD: 42 Trần Phú, P.4, Q.5, TP.HCM - Điện thoại: 0364 333 333
Tổng đài miễn cước: 1800 6734 - Email: sales@tino.org
- Trang web: www.tino.org
Xem thêm nhiều bài viết về : Kiến Thức Cơ Bản
Bản quyền thuộc: thuthuatkiemtien.com
from thuthuatkiemtien.com https://ift.tt/30wlqhD
via thuthuatkiemtien.com
Nhận xét
Đăng nhận xét