Singleton design pattern

    Chắc có lẽ bạn đã một vài lần nghe qua singleton design pattern. Vậy singleton là gì? Và khi nào nên dùng nó, chúng ta hãy cùng tìm hiểu nhé.





1. Singleton là gì?

    Singleton là tên của  một design pattern thuộc nhóm creational. Mục đích của nó là đảm bảo một đổi tượng sẽ được khởi tạo đúng một lần duy nhất, nghĩa là nếu đối tượng đó chưa được khởi tạo thì sẽ tạo ra đổi tượng đó, nếu đối tượng đã được khởi tạo nó sẽ không tạo ra nữa mà sẽ trả về đối tượng đã có sẵn.

2. Tại sao không nên khởi tạo một đối tượng nhiều lần?

    Ví dụ trong code của bạn rất thường xuyên log lại những message (lỗi, cảnh báo...) để có thể trace nếu cần, thậm chí trong một hàm có đến 3 đến 4 chỗ sử dụng hàm log. Việc bạn khởi tạo nhiều đối tượng cũng không cần thiết lắm, thế nên đối tượng Logger nên tạo ra đúng một lần duy nhất.

3. Triển khai singleton như thế nào ?

   Mình sẽ ví dụ singleton bằng PHP code nhé.



4. Nhược điểm của Singleton?

    - Bên cạnh những ưu điểm trên, singleton cũng mang lại khá nhiều vấn đề, nó vi phạm tính chất Single Responsibility Principle bởi vì nó vừa chịu trách nhiệm khởi tạo mà còn chứa các business logic.

    - Đối tượng sử dụng sẽ bị tightly coupled với class singleton ( trong một số framework như Symfony hay Laravel đã đưa singleton vào service container để tăng tính loose coupling).

    - Ví dụ trên bạn cũng thấy, mình đã hide the constructor và sử dụng một global state $instance. Điều này dẫn đến việc testing rất khó khăn.

5. Khi nào nên sử dụng Singleton?

   - Những trường hợp bạn có thể áp dụng singleton khi cho các đối tượng chỉ cần tạo ra một đối tượng duy nhất như: Database Connection, Logger, Cache hay File System...

 - Hy vọng qua bài viết có thể giúp bạn hiểu về singleton design patern.






Nhận xét