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.10.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.10.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.
1.3.11. Mẫu Visitor (mẫu kiểm tra) 1.3.11.1. í nghĩa 1.3.11.1. í nghĩa
Mẫu Visitor đƣợc dựng để phõn tỏch cỏc thuật toỏn với cấu trỳc của đối tƣợng, tạo điều kiện cho việc thay đổi cỏc phƣơng thức, hàm vào cấu trỳc những đối tƣợng đó cú mà khụng làm thay đổi cấu trỳc này.
1.3.11.2. Cấu trỳc mẫu
í tƣởng của việc tổ chức mẫu này là dựng một cấu trỳc những lớp đúng vai trũ làm “dữ liệu” (lớp Element), mỗi lớp Element này sẽ cài đặt một phƣơng thức
(Accept) nhận một đối tƣợng đúng vai trũ “thuật toỏn” (lớp Visitor) làm tham số hàm. Đối tƣợng “thuật toỏn” Visitor cài đặt những hàm xử lý, thuật toỏn… cho nhiều loại đối tƣợng “dữ liệu”. Trong phƣơng thức Accept của đối tƣợng “dữ liệu” ta phải gọi đỳng hàm xử lý và thuật toỏn tƣơng ứng cho nú.
Kỹ thuật cài đặt này khắc phục đƣợc cỏc hạn chế của kỹ thuật nạp chồng hàm (Function Overloading) và nú cú một tờn gọi khỏc là kỹ thuật double dispatch.