4. Tóm tắt cấu trúc của luận văn
1.3. Một số mẫu thiết kế ựiển hình trong các ứng dụng quản lý
1.3.6. Mẫu Chiến lược
1.3.6.1. Ý nghĩa
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 Chiến lược (Strategy) cho phép thực hiện việc ựóng gói ựối với từng 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.
1.3.6.2. Cấu trúc mẫu
Các thành phần tham gia vào cấu trúc mẫu 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ể có 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.
1.3.6.3. Các tình huống áp dụng
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.
1.3.6.4. Thuận lợi và hạn chế
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ẫu này cung cấp những cách thực thi khác nhau cho cùng một hành vi.
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.