- Rất khó tái sử dụng phương thức này ₫ể tạo ram ột maze có ₫ặc ₫iểm khác (VD: maze trong ₫ó các phòng có thể có bom hoặc quà tặng, cửa giữa các phòng chỉ có
Ví dụ về nhu cầu ứng dụng Strategy
Chương trình chơi game có thể có nhiều giải thuật tùy vào mức ₫ộ khó của cuộc chơi. Khi người chơi chọn mức ₫ộ khó dễ chính là thao tác chọn giải thuật. Do ₫ó ₫ối tượng giải thuật phải tách biệt với code chương trình. Một hướng giải quyết ₫ược ₫ề nghị như sau:
Định nghĩa 1 interface chung cho các lớp thể hiện các giải thuật.
Định nghĩa các lớp concrete hiện thực interface trên, mỗi lớp concrete thể
hiện một giải thuật.
Chương trình sử dụng ₫ối tượng kiểu interface và cho phép client thay thế
bằng ₫ối tượng thể hiện giải thuật cụ thể khi chạy. →hướng giải quyết vấn ₫ề của mẫu Strategy.
Bö mön Cöng nghï phền mï̀m Khoa CNTT
ĐH Bach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 327 Composition Traverse() Repair() compositor->Compose(); compositor Ví dụ về mẫu Strategy Chương 11 : Các mẫu Creational Compositor Compose() ArrayCompositor Compose() TeXCompositor Compose() SimpleCompositor Compose() Context ContextInterface() strategy Lược ₫ồ cấu trúc của mẫu Strategy Strategy AlgorithmInterface() ConcreteStrategyA AlgorithmInterface() ConcreteStrategyB AlgorithmInterface() ConcreteStrategyC AlgorithmInterface()
Bö mön Cöng nghï phền mï̀m Khoa CNTT
ĐH Bach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 329
Strategy (Compositor) :₫ịnh nghĩa interface cho tất cả các lớp thể hiện giải thuật. Có thể nhận pointer ₫ến ₫ối tượng Context trong quá trình khởi tạo ₫ối tượng ₫ể truy xuất dữ liệu trong Context.
ConcreteStrategy (SimpleCompositor, TeXCompositor..) :hiện thực interface Strategy, thể hiện một giải thuật cụ thể.
Context (Composition) :
tại thời ₫iểm 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 run-time: ₫ược 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 entry cho phép ₫ối tuợng kiểu Strategy truy xuất dữ liệu.
Các phần tử tham gia
Chương 11 : Các mẫu Creational
Thường áp dụng mẫu Strategy trong các trường hợp sau:
Một lớp có nhiều hành vi loại 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 1 lớp Concrete Strategy và lớp có nhiều hành vi là lớp Strategy.
Giải thuật cần ₫ược che dấu cả về dữ liệu và cấu trúc ₫ối với chương trình Client.
Một số chương trình có thể áp dụng Strategy :
Compiler, OS: quá trình tối ưu hóa
Game: Quá trình chọn giải thuật
Các giao diện tổng quát (common dialog trong VB…)