Định nghĩa
Mẫu thiết kế Itinerary hướng tới hành trình của aglet và sự định hướng giữa các điểm đến.
Mục đích
Trở thành một thực thể di động tự trị, một aglet nền – hành trình có thể định hướng độc lập tới nhiều trạm. Đặc biệt, nó cần có khả năng kiểm soát các ngoại lệ (ví dụ như các trạm chưa biết khi thực hiện gửi nó tới các điểm đến mới). Chẳng hạn, nó có thể tự gửi nó đến dịch vụ niên giám các trang vàng, lấy thông tin liên quan đến điểm đến và đặt chúng vào lộ trình của mình.
initializeTask() dispatch() doTask() dispose() sendMessage()-Result aMaster on Host A aSlave on Host A aSlave on Host B
Mẫu thiết kế được xây dựng dựa trên ý tưởng là chuyển trách nhiệm di chuyển từ aglet cho đối tượng hành trình liên hợp với nó. Lớp hành trình cung 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
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.