Một bài toán, chương trình có nhiều thuật toán khác nhau để giải quyết một vấn đề nào đó. Mẫu này cho phép thực hiện việc đóng gói đối với từng
- 37 –
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
thuật toán trong họ và cho phép Client lựa chọn thuật toán cụ thể trong số đó khi sử dụng.
* Cấu trúc của mẫu
Các thành phần tham gia vào cấu trúc Strategy:
Strategy: Định nghĩa giao diện cho tất cả các lớp thể hiện giải thuật. Có
thể nhận con trỏ tham chiếu đến đối tượng ngữ cảnh Context trong quá trình khởi tạo đối tượng để có thể thêm các dữ liệu chứa trong đối tượng ngữ cảnh Context.
ConcreteStrategy: Triển khai giao diện Strategy để thể hiện một giải thuật
cụ thể.
Context: Tại thời điểm biên dịch, chỉ sử dụng đối tượng kiểu Strategy khi
xác định giải thuật cho vấn đề cần xử lý. Tại thời điểm chạy chương trình, nó cung cấp một đối tượng giải thuật cụ thể thay thế cho đối tượng Strategy. Có thể cung cấp con trỏ cho phép Strategy truy xuất dữ liệu của đối tượng Context.
* Phạm vi ứng dụng mẫu
- 38 –
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Mẫu Strategy thường được áp dụng trong trường hợp một lớp có nhiều hành vi loại trừ lẫn nhau và quá trình chuyển từ hành vi này sang hành vi khác cần được thực hiện dễ dàng. Khi đó mỗi hành vi sẽ được thể hiện trong một lớp ConcreteStrategy.
* Nhận xét
Kiến trúc phân cấp của những lớp Strategy định nghĩa một họ các thuật toán hoặc các hành vi đối với những ngữ cảnh thích hợp phục vụ cho việc tái sử dụng. Việc thực hiện những chức năng chung của thuật toán được thực hiện thông qua kế thừa giao tiếp chung Strategy.
Việc tách sự thực hiện các giải thuật khỏi lớp Context thành các Strategy và sự kế thừa từ các Strategy tạo nên sự đa dạng về thuật toán và hành vi. Việc thực thi thuật toán và thực thi lớp Context được tách biệt, làm cho lớp Context dễ hiểu, dễ bảo trì và sử dụng.
Một sự hạn chế của mẫu này là người dùng phải biết về những Strategy khác nhau và phải hiểu bằng cách nào để phân biệt các Strategy trước khi chọn một Strategy chính xác để thực hiện.