Mẫu Chain of Responsibility

Một phần của tài liệu nghiên cứu mẫu thiết kế kiến trúc phần mềm trong java (Trang 39 - 42)

- Vấn đề đặt ra

Xột bài toỏn xõy dựng hệ thống trợ giỳp phụ thuộc ngữ cảnh cho một giao diện đồ hoạ; trong đú người sử dụng cú thể lấy thụng tin trợ giỳp về bất cứ thành phần nào của giao diện bằng cỏch ấn vào nú. Thụng tin trợ giỳp cung cấp phụ thuộc

Số húa bởi Trung tõm Học liệu - Đại học Thỏi Nguyờn http://www.lrc-tnu.edu.vn

vào thành phần giao diện đựơc chọn và ngữ cảnh của nú. Lấy vớ dụ một nỳt trong một hộp thoại sẽ cú thụng tin trợ giỳp khỏc với một nỳt tương tự trong cửa sổ chớnh. Ngoài ra nếu khụng cú thụng tin trợ giỳp nào được cung cấp cho thành phần đựơc chọn của giao diện, hệ thống trợ giỳp sẽ hiển thị thụng tin trợ giỳp tổng quỏt hơn về ngữ cảnh, lấy vớ dụ thụng tin về hộp thoại.

Bài toỏn trờn dẫn đến một hành động rất tự nhiờn đú là tổ chức cỏc thụng tin trợ giỳp theo mức độ tổng quỏt của chỳng, từ cụ thể nhất đến tổng quỏt nhất. Ngoài ra chỳng ta cũng dễ dàng nhận thấy rằng yờu cầu trợ giỳp sẽ được xử lý bởi một trong số cỏc đối tượng giao diện người dựng phụ thuộc vào ngữ cảnh sử dụng và tớnh chi tiết của thụng tin trợ giỳp đươc cung cấp.

Vấn đề đặt ra ở đõy là đối tượng khởi xướng yờu cầu khụng hề biết yờu cầu đú sẽ được xử lý bởi đối tượng cụ thể nào. Vỡ thế chỳng ta cần cú cơ chế tỏch rời chỳng, và mẫu Chain of Responsibility xõy dựng mụ hỡnh để thực hiện điều này:

Theo mụ hỡnh này, đối tượng đầu tiờn trong dõy chuyền sẽ nhận được yờu cầu cú thể xử lý yờu cầu đú hoặc chuyển nú cho đối tượng kế tiếp; điều tương tự cũng xảy ra với đối tượng này. Bằng cỏch này, đối tượng khởi xướng yờu cầu khụng cần biết yờu cầu sẽ được xử lý bởi đối tượng nào, nú chỉ biết rằng yờu cầu đú sẽ đựơc xử lý một cỏch “hợp lý” nhất.

Giả sử người sử dụng yờu cầu trợ giỳp cho một nỳt cú tiờu đề “Print”. Nỳt đú được đặt trong hộp thoại PrintDialog. Đến lượt mỡnh, hộp thoại đú lại cú khả năng xỏc định lớp Application chứa nú. Sơ đồ tương tỏc sau sẽ cho thấy cỏch thức yờu cầu trợ giỳp đú được truyền đi dọc theo dõy chuyền:

Số húa bởi Trung tõm Học liệu - Đại học Thỏi Nguyờn http://www.lrc-tnu.edu.vn

Trong trường hợp này, cả hai đối tượng aPrintButton và aPrintDialog đều khụng xử lý yờu cầu trợ giỳp; vỡ thế yờu cầu này được chuyển tới cho aApplication để xử lý hoặc bỏ qua khụng làm gỡ.

Để cú khả năng chuyền yờu cầu dọc theo dõy chuyền và để đảm bảo tớnh “ẩn” của cỏc đối tượng cú thể nhận yờu cầu (với đối tượng khởi xướng yờu cầu), mỗi đối tượng trờn dõy chuyền đều cú chung một giao diện trong việc xử lý yờu cầu và chuyển yờu cầu cho đối tượng kế tiếp. Lấy vớ dụ, hệ thống trợ giỳp cú thể định nghĩa lớp HelpHandler với phương thức HandleHelp tương ứng. Lớp HelpHandler cú thể được lấy làm lớp cha của cỏc lớp mà ta muốn cung cấp khả năng xử lý yờu cầu trợ giỳp:

Cỏc lớp Button, Dialog và Application sử dụng cỏc phương thức HandleHelp để xử lý yờu cầu trợ giỳp trong khi phương thức này mặc định chỉ chuyển tiếp yờu cầu trợ giỳp cho nỳt kế tiếp. Khi đú cỏc lớp con cú thể định nghĩa lại phương thức này để cung cấp thụng tin trợ giỳp cụ thể hoặc chỉ sự dụng phương thức mặc định để chuyển tiếp yờu cầu theo dõy chuyền.

Số húa bởi Trung tõm Học liệu - Đại học Thỏi Nguyờn http://www.lrc-tnu.edu.vn - Định nghĩa mẫu

Mẫu Chain of Responsiblity dựng để trỏnh sự liờn kết trực tiếp giữa đối tượng gửi yờu cầu và đối tượng nhận yờu cầu khi yờu cầu cú thể đựơc xử lý bởi hơn một đối tượng. Múc nối cỏc đối tượng nhận yờu cầu thành một chuỗi và gửi yờu cầu theo chuỗi đú cho đến khi cú một đối tượng xử lý nú.

- Sơđồ UML

Handler (Approver)

- Định nghĩa một giao diện cho việc nắm giữ cỏc yờu cầu. - Cài đặt liờn kết tới cỏc Successor

ConcreteHandler (Director, VicePresident, President)

- Nắm giữ cỏc yờu cầu mà nú đỏp ứng - Cú thể truy nhập nú

- Nếu ConcreteHandle cú thể nắm giữ cỏc yờu cầu, nú sẽ làm như vậy, bằng khụng nú sẽ gửi cỏc yờu cầu tới cỏc succcesor

Client (ChainApp)

- Khởi tạo yờu cầu tới đối tượng ConcreteHandler trờn chuối đỏp ứng

Một phần của tài liệu nghiên cứu mẫu thiết kế kiến trúc phần mềm trong java (Trang 39 - 42)