cấp một giao diện để bảo quản hay sửa đổi lộ trình của aglet và để gửi aglet tới các điểm đến mới. Một đối tượng aglet và một đối tượng lộ trình sẽ được kết nối như sau:
1) Aglet tạo một đối tượng hành trình và khởi tạo nó với một danh sách đích đến để viếng thăm lần lượt và một tham chiếu tới aglet.
2) Aglet sử dụng phương thứcgo() để tự gửi nó tới điểm đến kế tiếp trong hành trình của mình. Để hỗ trợ điều này, đối tượng hành trình cần được chuyển đi cùng với aglet.
Áp dụng
Sử dụng mẫu thiết kế này khi chúng ta cần:
Ẩn đi các chi tiết của kế hoạch di chuyển cho aglet đối với hành vi của nó nhằm phát triển tính mô-đun của cả hai phần.
Cung cấp một giao diện thống nhất cho việc di chuyển các aglet
Định nghĩa các kế hoạch di chuyển có thể dùng lại và chia sẻ bởi các aglet.
Các lớp đối tượng tham gia
Hình sau thể hiện các liên hệ cấu trúc giữa các đối tượng tham gia mẫu Itinerary.
1) Itinerary định nghĩa bộ khung của một hành trình, với hai phương thức trừu tượng:go() vàhasMoreDestinations().
2) ConcreteItinerary thực hiện các phương thức trừu tượng của lớp Itinerary và lưu vết của điểm đến hiện tại của aglet.
3) Aglet là lớp Aglet cơ sở. ConcreteItinerary URL origin AgletProxy aglet go() hasMoreDest() ConcreteItinerary go(){ } hasMoreDest(){ }
Hình 3.9: Các đối tượng trong mẫu Itinerary Aglet Aglet
abstract go()
Sự cộng tác
Hình vẽ 3.10 mô tả sự cộng tác tương ứng với mẫu Itinerary 1) Đối tượng ConcreteItinerary được khởi tạo bởi một aglet.
2) Đối tượng gửi aglet tới điểm đến đầu tiên
3) Khi aglet thực hiện phương thức go của hành trình, aglet được gửi tới điểm đến kế tiếp.
3.4.3. Kết hợp hai mẫu thiết kế
Trên đây ta mới chỉ mô tả các slave có một kế hoạch di chuyển đơn mà đích đến đơn giản. Slave-aglet gửi tới một trạm ở xa, thực hiện công việc của nó và trả về kết quả. Ta có thể kết hợp mẫu thiết kế Itinerary và mẫu Master-Slave. Kết quả sẽ là một slave-aglet di chuyển theo một hành trình, viếng thăm nhiều trạm và thực hiện công việc của mình tại mỗi trạm. Hình vẽ sau trình bày một biểu đồ cho master-aglet và intinerary-slave-aglet của nó.
go() go() dispatch(‘D’) go() Init(Aglet) anItinerary anAglet on Host D