Strategy Design Pattern


        1. Strategy design pattern là gì?

    - Trong design pattern được chia làm 3 nhóm chính: creational pattern, structural pattern, behavior pattern. Và strategy design pattern thuộc nhóm behavior pattern.

    - Nó cho phép định nghĩa tập hợp các thuật toán, đóng gói từng thuật toán lại, và dễ dàng thay đổi linh hoạt các thuật toán bên trong object. Strategy cho phép thuật toán biến đổi độc lập khi người dùng sử dụng chúng.


        2. Những trường hợp có thể áp dụng strategy:

    - Trong một dự án có chức năng convert hình ảnh jpg sang có loại khác, ban đầu chỉ có loại convert sang png. Ban đầu chúng ta chỉ cần xây dựng 1 class ImageConvertor với hàm convertTo và truyền vào image.
Image converter class

    - Vấn  đề: Sau một thời gian thì dự án bắt đầu phát triển và yêu cầu chúng ta thêm những loại convert khác như webp, tiff, gif và có thể sau này sẽ thêm nhiều loại convert khác nữa.

Giải quyết vấn đề:

    - Vào thẳng hàm convert để sửa if else trong đó. Cách này vẫn đáp ứng được nhưng nếu sau này thêm nhiều loại vào sẽ cực kì rối rắm và hàm sẽ trở nên rất dài. Và đặc biệt sẽ vi phạm tính chất Open-Closed Principle trong SOLID.

Thay đổi logic trong convert method

Vậy hãy thử áp dụng Strategy design pattern xem có giải quyết được vấn đề không ?

        3. Triển khai strategy design pattern?

Class diagram

- Những class image convert sẽ implements interface và thực hiện các hành động theo logic khác nhau của mình thông qua method convert.

Convertor Interface và các implements

Hàm convert trong ImageConvertor sẽ chuyển thành như thế này.

Sử dụng các loại convert.

Sử dụng hàm setConvertor để thay đổi imlement của hàm convert ở môi trường runtime

        4. Tổng kết:

    - Khi nào nên sử dụng:
            + Hàm có nhiều loại logic bên trong, mỗi nơi gọi hàm sẽ cần 1 logic khác nhau.
            + Thường xuyên thay đổi và thêm logic mới.
    - Không nên sử dụng khi không có logic quá nhiều, và ít thay đổi.

    



Nhận xét