Bài viết Singleton Là Gì – Và Có Nên dùng Singleton Pattern thuộc chủ đề về Hỏi Đáp đang được rất nhiều bạn quan tâm đúng không nào !! Hôm nay, Hãy cùng TruongGiaThien.Com.Vn tìm hiểu Singleton Là Gì – Và Có Nên dùng Singleton Pattern trong bài viết hôm nay nha !
Các bạn đang xem nội dung : “Singleton Là Gì – Và Có Nên dùng Singleton Pattern”

Warm upKhi công ty ngày càng phát triển và cung cấp dịch vụ rộng rãi, số lượng shipper tăng đều. Để tiện quản lý, ta có phần mềm quản lý riêng shipper, với mỗi shipper sẽ có một object tương ứng tạo ra. Sẽ thế nào nếu có xxx object cùng kết nối đến database? Làm thế nào để đảm bảo cho việc chỉ có 1 kết nối đến database và các tác vụ được thực hiện tuần tự, truy cập được đồng bộ?Singleton lúc này sẽ là một giải pháp hữu hiệu. Vậy Singleton là gì? Singleton cần đảm bảo những gì? Triển khai Singleton như thế nào? Bài viết này sẽ giải đáp những câu hỏi trên về Singleton.

Bạn đang xem: Singleton là gì

Singleton là gì?

Design Patterns, những giải pháp tổng quát nhất khả năng tái dùng cho các trường hợp khi rất cần thiết kế kiến trúc phần mềm. Singleton là một trong số đó, thuộc nhóm khởi tạo — Creational Patterns.Singleton đối ứng với các cơ chế tạo và kiểm soát việc tạo đối tượng. Đúng như cái tên “đơn độc” của mình, Singleton đảm bảo cho mỗi class chỉ có duy nhất một thể hiện được khởi tạo và được truy xuất mọi nơi.Đối với ví dụ trên, Singleton sẽ chỉ tạo ra một thể hiện của đối tượng — instance — khởi tạo duy nhất một lần nhưng khả năng truy xuất và dùng mọi nơi.Trực quan hơn ta có một biểu đồ UML thể hiện Singleton:

*

*

Singleton UML DiagramVậy Singleton có gì?

Triển khai Singleton có khá nhiều cách mặc khác cách nào cũng cần đảm bảo những yếu tố sau mới đảm bảo class đó là class Singleton:+ Private static field — một trường static chỉ khả năng truy cập trong class để khởi tạo instance, đảm bảo cho tính duy nhất và chỉ được tạo trong class đó của instance.+ Private constructor — một phương thức khởi tạo cũng Giảm khả năng truy cập từ bên ngoài, ngăn việc tạo instance từ bên ngoài.+ Public method — một phương thức trả về instance không Giảm khả năng truy cập từ đó khả năng truy xuất và dùng instance mọi nơi.Triển khai Singleton thế nào?Như đã nói ở trên, có rất nhiều cách để triển khai Singleton nhưng trong bài viết này, ta sẽ nói đến những cách thức triển khai đơn giản, chung nhất cho Singleton.a. Eager Initialization:Kiểu khởi tạo “xông xáo”, nghĩa là không cần biết em là ai, không cần biết em từ đâu, nhưng vẫn quyết tâm khởi tạo ra một instance ngay khi class được load lần đầu.Đây là phương pháp khởi tạo đơn giản nhất, nhanh đối với instance không quá tốn nhiều tài nguyên. Nên từ đó sinh ra những Giảm như sau:+ Instance tạo ra khả năng không cần dùng đến.+ Performance thấp, tốn tài nguyên do khởi tạo instance ngay khi class được load.+Không có cách nào để bắt lỗi và xử lý lỗi (exception) trong quy trình khởi tạo.Ví dụ về cách khởi tạo “xông xáo”:

Bài Nổi Bật  Scrape Là Gì - Scrape In Vietnamese

public class Student private static final Student INSTANCE = new Student(); private Student() public static Student getInstance() return INSTANCE; b. Static block Initialization:Tương tự như Eager Init nhưng cách triển khai này có thêm một static block cung cấp xử lý ngoại lệ trong quy trình khởi tạo. Dù khắc phục được nhược điểm về bắt và xử lý lỗi của Eager nhưng Static Block vẫn còn Giảm về performance cũng như tính hữu dụng của instance.

public class Student private static Student instance; private Student() static try instance = new Student(); catch(Exception e) throw new RuntimeException(“Exception occured in creating singleton instance); public static Student getInstance() return instance; c. Lazy InitializationĐây là phương pháp triển khai mở rộng, giải quyết Giảm cho hai cách triển khai trên nhưng chỉ vận hành tốt với Thread đơn lẻ. Kiểu khởi tạo “lười” này chỉ tạo instance khi cần dùng đến. Nghĩa là việc khởi tạo và trả về instance sẽ cùng thực hiện trong method được cung cấp khi method đó được gọi.Tránh được Giảm về xử lý ngoại lệ, nâng cao hơn được performance và tối ưu instance được tạo thì Lazy lại gặp lỗi với đa luồng (multi thread) do method khả năng khởi tạo cùng lúc nhiều đối tượng ở các luồng khác nhau, phá vỡ tính chất của Singleton.

public class Student private static Student instance; private Student() public static Student getInstance() if(instance == null) instance = new Student(); return instance; d. Thread Safe Singleton:Thread safe — luồng an toàn — sinh ra như một cách giải quyết vấn đề cho Lazy, Thread Safe làm việc với đa luồng. Thread Safe triển khai tương tự Lazy nhưng trong phương thức truy cập được thêm vào từ khóa synchronized, đồng bộ hóa quy trình truy cập và khởi tạo, tạo ra sự tuần tự, luồng nào đến trước sẽ được xử lý trước.mặc khác thread safe có performance thấp do synchronized bao quát tất cả các quy trình xuất hiện trong phương thức nên làm chậm quy trình truy xuất instance.

Bài Nổi Bật  Take Initiative Là Gì - Initiative Là Gì, Nghĩa Của Từ Initiative

Xem thêm: Trx Là Gì – Tron (Trx) Là Gì

public class Student private static Student instance; private Student() public static synchronized Student getInstance() if(instance == null) instance = new Student(); return instance; Để tối ưu hiệu suất (Performance):

public class Student private static Student instance; private Student() public static Student getInstance() if(instance == null) synchronized(Student.class) instance = new Student(); return instance; e. Bill Pugh Implementation:Phương pháp này do Bill Pugh triển khai dựa trên cơ chế static nested class. Ông tạo ra một lớp Helper private ngay trong class Singleton, tăng tính bao gói dữ liệu giữa các lớp, tiện hơn cho việc đọc và bảo trì code. Khi Singleton được tải vào bộ nhớ thì SingletonHelper chưa được tải vào. Khi và chỉ khi phương thức trả về được gọi, SingletonHelper mới được tải và tạo ra instance.Cách làm của Bill Pugh tránh được lỗi cơ chế khởi tạo instance của Singleton trong Multi Thread, performance cao do tách biệt được quy trình xử lý. Cách làm này được đánh giá là phương pháp triển khai Singleton nhanh và hiệu quả nhất.

public class Student //static nested class private static class SingletonHelper private static final Student INSTANCE = new Student(); private Student() public static Student getInstance() return SingletonHelper.INSTANCE; mặt khác còn có các cách triển khai nâng cao với Enum Singleton, Serializable hoặc phá vỡ cấu trúc Singleton với Reflection API nhưng ta sẽ không triển khai chi tiết trong bài viết này.

Lời kết

Singleton trên thực tế thường dùng để thiết kế hay tạo ra đối tượng implement cho các class Logger, Cache, Connect Pool, Thread Pool,… — là những đối tượng chỉ cần tạo ra một lần, không rất cần thiết tạo thêm các thể hiện khác.

Bài Nổi Bật  Ngày 14 tháng 3 là ngày gì ?

Singleton có quan hệ tốt với các Patterns khác, góp phần xây dựng pattern như: Abstract Factory, Builder, Facade, Prototype,…

Với sự “đơn thương độc mã” quyền lực của mình, Singleton là một mẫu thiết kế quan trọng trong thiết kế cấu trúc phần mềm, phát huy tốt cho những tình huống cần quản lý khởi tạo và truy cập của đối tượng.

Xem thêm: Hiện Tượng Đa Cộng Tuyến Là Gì, Các Giải Pháp Khắc Phục Đa Cộng Tuyến

Để tìm hiểu thêm về Singleton hay Design Pattern, bạn khả năng tìm đọc sâu hơn trong cuốn Gang of Four Design Pattern hay Design Pattern For Dummies.

Chuyên mục: Hỏi Đáp

Các câu hỏi về Singleton Là Gì – Và Có Nên dùng Singleton Pattern


Nếu có bắt kỳ câu hỏi thắc mắt nào vê Singleton Là Gì – Và Có Nên dùng Singleton Pattern hãy cho chúng mình biết nha, mõi thắt mắt hay góp ý của các bạn sẽ giúp mình nâng cao hơn hơn trong các bài sau nha <3 Bài viết Singleton Là Gì - Và Có Nên dùng Singleton Pattern ! được mình và team xem xét cũng như tổng hợp từ nhiều nguồn. Nếu thấy bài viết Singleton Là Gì - Và Có Nên dùng Singleton Pattern Cực hay ! Hay thì hãy ủng hộ team Like hoặc share. Nếu thấy bài viết Singleton Là Gì - Và Có Nên dùng Singleton Pattern rât hay ! chưa hay, hoặc cần bổ sung. Bạn góp ý giúp mình nha!!

Các Hình Ảnh Về Singleton Là Gì – Và Có Nên dùng Singleton Pattern

Singleton Là Gì - Và Có Nên Sử Dụng Singleton Pattern

Các từ khóa tìm kiếm cho bài viết #Singleton #Là #Gì #Và #Có #Nên #Sử #Dụng #Singleton #Pattern

Tham khảo thêm thông tin về Singleton Là Gì – Và Có Nên dùng Singleton Pattern tại WikiPedia

Bạn nên tìm thông tin về Singleton Là Gì – Và Có Nên dùng Singleton Pattern từ trang Wikipedia.◄

Tham Gia Cộng Đồng Tại

💝 Nguồn Tin tại: https://truonggiathien.com.vn/

💝 Xem Thêm Chủ Đề Liên Quan tại : https://truonggiathien.com.vn/hoi-dap/

Give a Comment