Bài giảng Các mẫu thiết kế hướng đối tượng - Chương 8: Các mẫu thiết kế che dấu hành vi, thuật giải trong đối tượng (Behavioral Patterns) (Creational Patterns)

8.1 Tổng quát về nhóm mẫu “Behavioral Patterns”

8.2 Mẫu Chain of Responsibility

8.3 Mẫu Template Method

8.4 Mẫu Strategy

8.5 Mẫu State

8.6 Mẫu Command

8.7 Mẫu Observer

8.8 Kết chương

pdf 43 trang phuongnguyen 9120
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Các mẫu thiết kế hướng đối tượng - Chương 8: Các mẫu thiết kế che dấu hành vi, thuật giải trong đối tượng (Behavioral Patterns) (Creational Patterns)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Các mẫu thiết kế hướng đối tượng - Chương 8: Các mẫu thiết kế che dấu hành vi, thuật giải trong đối tượng (Behavioral Patterns) (Creational Patterns)

Bài giảng Các mẫu thiết kế hướng đối tượng - Chương 8: Các mẫu thiết kế che dấu hành vi, thuật giải trong đối tượng (Behavioral Patterns) (Creational Patterns)
 Chương 8
 Các mẫu thiết kế che dấu hành vi, thuật giải
 trong ₫ối tượng (Behavioral Patterns)
 8.1 Tổng quát về nhóm mẫu “Behavioral Patterns” 
 8.2 Mẫu Chain of Responsibility
 8.3 Mẫu Template Method
 8.4 Mẫu Strategy
 8.5 Mẫu State
 8.6 Mẫu Command
 8.7 Mẫu Observer
 8.8 Kết chương
Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
© 2010 Slide 1
8.1 Tổng quát về nhóm mẫu “Behavioral Patterns” 
 Trong ₫oạn code giải quyết vấn ₫ề của ứng dụng, khi cần phải
 chọn lựa 1 trong nhiều thuật giải/hành vi khác nhau thì ta thường
 dùng phát biểu if/switch như sau :
 switch (acode) {
 case ALG1 : //₫oạn code miêu tả thuật giải/hành vi 1
 case ALG2 : //₫oạn code miêu tả thuật giải/hành vi 2
 case ALGn : //₫oạn code miêu tả thuật giải/hành vi n
 }
 Đoạn code trên có nhiều khuyết ₫iểm như : phu thuộc hoàn toàn
 vào số lượng thuật giải/hành vi, vào chi tiết cụ thể của từng thuật
 giải/hành vi, phải hiệu chỉnh khi số lượng/chi tiết của thuật
 giải/hành vi bị thay ₫ổi.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 2
8.1 Tổng quát về nhóm mẫu “Behavioral Patterns” 
 Để khắc phục các nhược ₫iểm của cách lập trình cổ ₫iển trong 
 slide trước, cách tốt nhất là dùng 1 trong các mẫu thuộc nhóm 
 “Behavioral Patterns”. 
 Nhiệm vụ của các mẫu thuộc nhóm “” là che dấu các ₫oạn code 
 miêu tả thuật giải/hành vi vào trong các ₫ối tượng, code của client 
 chỉ giữ tham khảo ₫ến ₫ối tượng và gởi thông ₫iệp nhờ ₫ối tượng 
 thực hiện thuật giải/hành vi cụ thể khi cần thiết.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 3
8.2 Mẫu Chain of Responsibility
Mục tiêu :
 . Mẫu dây chuyền trách nhiệm (Chain of Responsibility) giúp 
 tránh ₫ược việc gắn kết cứng giữa phần tử gởi request (Client) 
 với phần tử nhận và xử lý request (Server) bằng cách cho phép 
 hơn 1 ₫ối tượng có cơ hội xử lý request ₫ó. Các ₫ối tượng nhận 
 và xử lý request sẽ ₫ược liên kết lại thành 1 dây chuyền, Client 
 sẽ tham khảo ₫ến ₫ầu dây chuyền này ₫ể gởi request khi có 
 yêu cầu.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 4
8.2 Mẫu Chain of Responsibility
Thí dụ về việc dùng mẫu Chain of Responsibility :
. Trong ứng dụng có trợ giúp theo ngữ cảnh thì user có thể xem 
 thông tin trợ giúp của 1 phần tử giao diện nào ₫ó trực tiếp từ phần tử 
 ₫ó bằng cách ấn phải chuột vào nó. Lưu ý là các ₫ối tượng giao 
 diện thường ₫ược tổ chức theo dạng cây thứ bậc : 1 chương trình có 
 nhiều cửa sổ giao diện, mỗi cửa sổ giao diện chứa nhiều ₫ối tượng 
 giao diện, mỗi ₫ối tượng giao diện có thể là group chứa nhiều ₫ối 
 tượng giao diện con Tóm lại số lượng các ₫ối tượng giao diện ₫ơn 
 (không chứa ₫ối tượng khác nữa) của chương trình thường rất lớn, 
 chi phí hiện thực tất cả sự trợ giúp cho tất cả các ₫ối tượng ₫ơn này 
 sẽ rất lớn, do ₫ó thường sẽ ₫ược hiện thực từ từ thông qua nhiều 
 version mới ₫ạt ₫ược sự hoàn chỉnh. Tuy nhiên, dưới góc nhìn user, 
 ngay cả version ₫ầu tiên, chương trình cũng phải ₫áp ứng tốt mọi 
 yêu cầu trợ giúp theo ngữ cảnh trên mọi ₫ối tượng giao diện.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 5
8.2 Mẫu Chain of Responsibility
Cách tốt nhất ₫ể giải 
quyết vần ₫ề trên là 
dùng mẫu Chain of 
Responsibility với lược 
₫ồ class như sau :
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 6
8.2 Mẫu Chain of Responsibility
Lược ₫ồ ₫ối tượng liên quan ₫ến 1 button nào ₫ó có dạng như sau :
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 7
 8.2 Mẫu Chain of Responsibility
 Theo lược ₫ồ ₫ối tượng của Button như trên thì khi user ấn phải chuột 
vào button ₫ể xem trợ giúp về button ₫ó thì :
 . Hoặc là hàm xử lý HandleHelp() của chính button ₫ó chạy (nếu có 
 hiện thực) ₫ể hiển thị nội dung trợ giúp chính xác về button ₫ó.
 . Hoặc là hàm xử lý HandleHelp() của ₫ối tượng chứa button sẽ chạy 
 (GroupBox - nếu có hiện thực) ₫ể hiển thị nội dung trợ giúp về phần 
 tử GroupBox ₫ó, nội dung này thường chứa thông tin trợ giúp của 
 button.
 . Tương tự, nếu GroupBox không hiện thực hàm xử lý HandleHelp() 
 thì hàm HandleHelp() của Form sẽ chạy, còn nếu Form cũng không 
 hiện thực hàm xử lý HandleHelp() thì cuối cùng hàm xử lý 
 HandleHelp() của chương trình sẽ chạy. Trong trường hợp này user 
 sẽ xem ₫ược nội dung trợ giúp của toàn phần mềm, trong ₫ó có 
 thông tin sử dụng button mà họ cần.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 8
8.2 Mẫu Chain of Responsibility
Ta có thể xây dựng 
mẫu Chain of 
Responsibility theo loại 
object pattern với lược 
₫ồ class như sau :
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 9
 8.2 Mẫu Chain of Responsibility
Các phần tử tham gia :
. IService (IHelpHandler) : ₫ịnh nghĩa interface của tác vụ xử lý 
 request.
. AbstractService (Widget) : ₫ặc tả các thành phần dùng chung cho tất 
 cả ₫ối tượng xử lý request, thí dụ thuộc tính tham khảo ₫ến ₫ối tượng 
 ₫i sau mình trong dây chuyền xử lý, hiện thực tác vụ request() với 
 nhiệm vụ cơ bản nhất là gọi tác vụ này của ₫ối tượng mà mình tham 
 khảo trực tiếp.
. ConcreteService1 (Button) : hiện thực tác vụ request() theo yêu 
 cầu riêng của mình theo ý tưởng chung như sau : nếu có thể xử lý 
 ₫ược request, nó sẽ xử lý, nếu không thì gởi tiếp request cho ₫ối 
 tượng ₫i sau giải quyết.
. Client : chứa tham khảo ₫ến ₫ối tượng ₫ầu tiên trong dây chuyền ₫ể 
 mỗi lần cần thực hiện request, nó sẽ gởi thông ₫iệp tới ₫ối tượng này.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 10
8.3 Mẫu Template Method
Mục tiêu :
 . Định nghĩa giải thuật tổng quát ₫ể giải quyết vấn ₫ề nào ₫ó 
 trong một tác vụ, trong giải thuật tổng quát này có gọi 1 số tác 
 vụ chức năng cơ bản nào ₫ó ₫ể thực hiện công việc theo yêu 
 cầu của giải thuật tổng quát, tuy nhiên các tác vụ cơ bản ₫ược 
 gọi sẽ ₫ược hiện thực sau trong các class con, chứ class hiện 
 hành cũng chưa biết chúng sẽ làm gì cụ thể.
 . Như chúng ta ₫ã trình bày nhiều lần trong tài liệu này, một trong 
 các mục tiêu chính của việc viết chương trình là phải viết ₫ược 
 ₫oạn code giải quyết ₫úng chức năng và có tính tổng quát hóa 
 cao ₫ể hạn chế tối ₫a việc hiệu chỉnh lại. Mẫu Template 
 Method là 1 trong những biện pháp hỗ trợ mục tiêu này.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 11
8.3 Mẫu Template Method
Thí dụ về việc dùng mẫu Template Method :
. Giả sử ta muốn viết chương trình quản lý hệ thống file 
 (FileManagerApp) cho phép user thực thực hiện 1 số tác vụ xử lý 
 hệ thống file như xóa file ₫ệ qui từ 1 thư mục xác ₫ịnh; ₫ếm số 
 lượng file con, cháu, chắtcủa 1 thư mục; tìm và diệt virus tất cả 
 các file từ thư mục xác ₫ịnh
. Phân tích các chức năng của chương trình xử lý hệ thống file ta 
 phát hiện 1 số ý tưởng sau :
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 12
8.3 Mẫu Template Method
Thí dụ về việc dùng mẫu Template Method :
. Mỗi chức năng cần 1 form giao diện với user, nhưng may mắn là 
 các form giao diện phục vụ các chức năng ₫ều khá giống nhau về 
 số lượng và tính chất các phần tử giao diện. Cụ thể mỗi form cần 
 chứa các ₫ối tượng giao diện như : Button ₫ể giúp user duyệt chọn 
 thư mục xuất phát, TextBox ₫ể hiển thị ₫ường dẫn thư mục xuất 
 phát, TextBox ₫ể giúp user ₫ặc tả pattern về các phần tử cần xử lý 
 (*, *.exe,), Button ₫ể user kích hoạt việc thực hiện chức năng, 
 ListBox ₫ể hiển thị thông tin về kết quả xử lý
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 13
8.3 Mẫu Template Method
Thí dụ về việc dùng mẫu Template Method :
. Mỗi chức năng cần phải duyệt ₫ệ qui hệ thống file, bắt ₫ầu từ thư 
 mục chỉ ₫ịnh bởi user, ₫ể lần lượt gặp từng file rồi thực hiện hoạt 
 ₫ộng xử lý xác ₫ịnh trên file ₫ó.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 14
8.3 Mẫu Template Method
Cách tốt nhất ₫ể 
xây dựng chương 
trình trên là dùng 
mẫu Template 
Method với lược ₫ồ 
class như sau :
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 15
 8.3 Mẫu Template Method
 Class FileCommandDlg ₫ặc tả form giao diện tổng quát cho mọi chức 
 năng, nó có 4 tác vụ miêu tả các giải thuật tổng quát ₫ược dùng chung 
cho mọi class con, ta gọi các tác vụ này là “template method” :
 . FileCommandDlg() chứa giải thuật tạo form, tạo các ₫ối tượng con 
 trong form và thêm chúng vào form ở vị trí và kích thước mong 
 muốn. Lệnh cuối cùng của giải thuật tạo form tổng quát này sẽ gọi 
 hàm initForm() ₫ể hiệu chỉnh nội dung chuỗi văn bản ₫ược hiển thị 
 kèm theo từng phần tử giao diện sao cho phù hợp với chức năng 
 ₫ặc thù.
 . Lưu ý là trong các môi trường lập trình trực quan như Visual Studio 
 .Net, người lập trình sẽ dùng tiện ích thiết kế trực quan form giao 
 diện cho dễ dàng, nhanh chóng, chính xác. Máy sẽ tự ₫ộng sinh 
 mã cho tác vụ tạo form theo ₫úng yêu cầu thiết kế của user.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 16
8.3 Mẫu Template Method
. btnBrowse_Click() là hàm xử lý sự kiện Click chuột trên button 
 Browse của user, nó có nhiệm vụ chung là hiển thị cửa sổ duyệt 
 chọn thư mục xuất phát.
. btnStart_Click() là hàm xử lý sự kiện Click chuột trên button Start 
 của user, nó có nhiệm vụ chung là thực hiện chức năng trên thư 
 mục xuất phát. Giải thuật của tác vụ này gồm 3 bước công việc : 
 prolog()  browseTree() epilog().
. browseTree() chứa giải thuật duyệt từng file 1 cách ₫ệ qui, xuất 
 phát từ thư mục xuất phát do user chỉ ₫ịnh, mỗi lần gặp 1 file thì sẽ 
 gọi tác vụ action() thực hiện hành vi nào ₫ó lên file.
. Các tác vụ initForm(), prolog(), action(), epilog() ₫ược dùng trong 
 giải thuật của tác vụ template method nhưng sẽ ₫ược từng class 
 con ₫ặc tả cụ thể theo yêu cầu chức năng ₫ặc thù của class con 
 ₫ó. Ta gọi các tác vụ này là “primitive function”.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 17
8.3 Mẫu Template Method 
Ta có thể xây dựng mẫu 
Template Method theo 
loại class pattern với 
lược ₫ồ class như sau 
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 18
8.3 Mẫu Template Method 
Các phần tử tham gia :
. ITemplate (Form) : ₫ịnh nghĩa interface thống nhất của các class 
 chức năng cần dùng, interface này thường chứa nhiều tác vụ chức 
 năng có tính chất chung như sau : ₫ể thực hiện chức năng ta sẽ 
 dùng giải thuật tổng quát. Như vậy các tác vụ chức năng trong 
 interface thường là các “template method”. 
. AbstractClass (FileCommandDlg) : ₫ặc tả class cha dùng chung, 
 class này chứa các tác vụ “template method”, mỗi tác vụ “template 
 method” miêu tả giải thuật tổng quát ₫ể thực hiện chức năng tương 
 ứng, trong giải thuật tổng quát có gọi các hàm “primitive function”.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 19
8.3 Mẫu Template Method 
Các phần tử tham gia (tt) :
. ConcreteClass1 (RecursiveFilesDelDlg) : các class con, mỗi 
 class chịu trách nhiệm override các hàm “primitive function” theo 
 yêu cầu xử lý ₫ặc thù của mình. Các class con này không cần và 
 không ₫ược phép override các tác vụ “template method” ₫ã ₫ược 
 ₫ặc tả 1 lần ở class cha.
. Client (FileManagerApp) : miêu tả ₫oạn code của client sử dụng 
 các chức năng khác nhau.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 20
8.4 Mẫu Strategy
Mục tiêu :
. Cung cấp một họ giải thuật khác nhau ₫ể giải quyết cùng 1 vấn ₫ề 
 nào ₫ó và cho phép Client chọn lựa linh ₫ộng dễ dàng một giải 
 thuật cụ thể theo từng tình huống sử dụng.
. Về nguyên lý chung, thường có nhiều giải thuật khác nhau cùng 
 giải quyết ₫ược 1 bài toán. Mỗi giải thuật có những ưu khuyết ₫iểm 
 riêng và sẽ thích hợp hơn trong ngữ cảnh sử dụng nào ₫ó so với 
 các giải thuật còn lại. Cách tốt nhất ₫ể giúp Client chọn lựa linh 
 ₫ộng và dễ dàng 1 giải thuật phù hợp theo từng tình huống là dùng 
 mẫu Strategy.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 21
8.4 Mẫu Strategy
Thí dụ về việc dùng mẫu Strategy :
. Thí dụ ₫ể sắp xếp thứ tự các phần tử trong 1 danh sách, ta có 
 nhiều giải thuật sắp xếp khác nhau như sắp tuần tự, bubblesort, 
 nhị phân, Cách tốt nhất ₫ể thiết lập linh ₫ộng giải thuật sắp xếp 
 cho danh sách và giúp code của các tác vụ chức năng trong ₫ối 
 tượng danh sách hoàn toàn ₫ộc lập với giải thuật sắp xếp thứ tự là 
 dùng mẫu Strategy với lược ₫ồ class như sau :
. Đối tượng danh sách có 1 tham khảo ₫ến ₫ối tượng thực hiện sắp 
 xếp thứ tự các phần tử, tùy yêu cầu cụ thể, ta tạo ₫ối tượng chứa 
 giải thuật sắp xếp mong muốn và gán tham khảo ₫ến ₫ối tượng 
 này vào thuộc tính tham khảo của ₫ối tượng danh sách. Mỗi lần 
 cần sắp xếp thứ tự các phần tử trong danh sách của mình, nó gởi 
 thông ₫iệp sStart.sort(this) ₫ể kích hoạt tác vụ sắp xếp thứ tự chứ 
 nó không biết chính xác giải thuật sắp xếp nào sẽ chạy.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 22
8.4 Mẫu Strategy
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 23
8.4 Mẫu Strategy
Ta có thể xây dựng mẫu Strategy theo loại object pattern với lược ₫ồ 
class như sau :
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 24
8.4 Mẫu Strategy
Các phần tử tham gia :
. IStrategy (ISortStrategy) : ₫ịnh nghĩa interface cho tất cả các class 
 thể hiện giải thuật thực hiện 1 chức năng xác ₫ịnh nào ₫ó. 
. Strategy1 (BinarySort) : class miêu tả giải thuật cụ thể ₫ể giải 
 quyết chức năng. Nó thường nhận tham khảo ₫ến Client (₫ối 
 tượng Subject) trong lúc ₫ược khởi tạo ₫ể thông qua tham khảo 
 này, nó truy xuất dữ liệu của Client hầu phục vụ giải thuật chức 
 năng của mình.
. Subject (List) : class ₫ặc tả Client có sử dụng giải thuật do 
 các class Strategy hiện thực.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 25
8.5 Mẫu State
Mục tiêu :
. Về nguyên lý chung, hành vi của ₫ối tượng có thể phụ thuộc vào 
 trạng thái hiện hành của ₫ối tượng ₫ó. Cách tốt nhất ₫ể giúp ₫ối 
 tượng thay ₫ổi linh ₫ộng và dễ dàng 1 hành vi phù hợp theo từng 
 trạng thái là dùng mẫu State.
. Cho phép 1 ₫ối tượng thay ₫ổi hành vi khi trạng thái bên trong của 
 nó thay ₫ổi. Ta có cảm giác như class của ₫ối tượng bị thay ₫ổi.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 26
8.5 Mẫu State
Thí dụ về việc dùng mẫu State :
. Thí dụ trong class TCPConnection miêu tả 1 mối nối mạng, ₫ối 
 tượng TCPConnection có thể ở 1 trong nhiều trạng thái : 
 Established, Listening, Closed. Khi ₫ối tượng TCPConnection 
 nhận request nào ₫ó, nó sẽ ₫áp ứng khác nhau tùy vào trạng thái 
 hiện hành. Cách tốt nhất ₫ể giải quyết yêu cầu trên là dùng mẫu 
 State theo lược ₫ồ class sau ₫ây :
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 27
8.5 Mẫu State
 state
 TCPConnection ITCPState
 Open() Open()
 Close() Close()
 Acknowledge() Acknowledge()
 state->Open();
 TCPEstablished TCPListen TCPClosed
 Open() Open() Open()
 Close() Close() Close()
 Acknowledge() Acknowledge() Acknowledge()
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 28
8.5 Mẫu State
Ta có thể xây dựng mẫu State theo loại object pattern với lược ₫ồ 
class như sau :
 state
 Context IState
 Request() Handle()
 ... ...
 state->Handle();
 ConcreteStateA ConcreteStateB ConcreteStateC
 Handle() Handle() Handle()
 ... ... ...
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 29
8.5 Mẫu State
Các phần tử tham gia :
. Context (TCPConnection) : ₫ịnh nghĩa interface cần dùng cho 
 client. Duy trì 1 tham khảo ₫ến ₫ối tượng của 1 class con 
 ConcreteState mà ₫ịnh nghĩa trạng thái hiện hành.
. IState (ITCPState) : ₫ịnh nghĩa interface nhằm bao ₫óng hành vi 
 kết hợp với trạng thái cụ thể. Duy trì 1 tham khảo ₫ến ₫ối tượng 
 của 1 class con ConcreteState mà ₫ịnh nghĩa trạng thái hiện 
 hành.
. ConcreteState (TCPEstablished, TCPListen, TCPClose) : ₫ịnh 
 nghĩa và che dấu hành vi cụ thể kết hợp với trạng thái của mình.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 30
8.6 Mẫu Command
Mục tiêu :
. Đóng gói ₫oạn code phục vụ 1 yêu cầu xác ₫ịnh của Client trong 
 một ₫ối tượng, nhờ ₫ó có thể thông số hóa ₫oạn code nhận và thực 
 hiện các thao tác trên request như sắp xếp, ghi logfile, undo,
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 31
8.6 Mẫu Command
Thí dụ về việc dùng mẫu Command :
. Chương trình có giao diện ₫ồ họa trực quan thường dùng nhiều 
 cửa sổ giao diện, mỗi cửa sổ thường có 1 thanh menubar chứa 
 nhiều menu dạng pop-up, mỗi menu pop-up chứa nhiều mục chức 
 năng, mỗi mục chức năng có thể là 1 menu pop-up con Cuối 
 cùng mỗi mục chức năng cơ bản ₫ược dùng ₫ể kích hoạt chức 
 năng tương ứng. Yêu cầu phổ biến về thanh menubar của cửa sổ 
 chức năng là nó có thể ₫ược hiệu chỉnh ₫ộng theo thời gian 
 (thêm/bớt/thay ₫ổi từng thành phần trong thanh menu), hoặc thậm 
 chí muốn thay ₫ổi hành vi ₫áp ứng với từng mục chức năng hiện 
 có trong thanh menubar. Cách tốt nhất ₫ể giải quyết vấn ₫ề này là 
 dùng mẫu Command với lược ₫ồ class như sau :
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 32
8.6 Mẫu Command
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 33
8.6 Mẫu Command
 . Mỗi ₫oạn code thực hiện chức năng nào ₫ó sẽ ₫ược ₫ặt trong tác 
 vụ execute() của 1 class tương ứng, các class này ₫ều hỗ trợ 
 cùng interface thống nhất ICommand. 
 . Mỗi ₫ối tượng giao diện (Button, mục chức năng của menu pop-
 up,) chứa 1 tham khảo ₫ến ₫ối tượng ICommand, hàm xử lý sự 
 kiện Click chuột trên nó luôn ₫ược viết như sau : cmd.execute(); 
 Lệnh này sẽ kích hoạt tác vụ execute() của ₫ối tượng ₫ược tham 
 khảo hiện hành chạy, còn ₫ối tượng ₫ược tham khảo là ai là tùy 
 theo hành vi cụ thể nào cần thực hiện.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 34
8.6 Mẫu Command
Ta có thể xây dựng 
mẫu Command 
theo loại object 
pattern với lược ₫ồ 
class như sau :
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 35
 8.6 Mẫu Command
Các phần tử tham gia :
. ICommand : interface thống nhất cho mọi ₫ối tượng xử lý request, nó 
 chứa ít nhất 1 tác vụ execute() ₫ể thực hiện hành vi ₫ược yêu cầu từ 
 client.
. Command1 (PasteCommand, OpenCommand) : class ₫ặc tả 
 giải thuật thực hiện hành vi cụ thể, nó thường có thuộc tính tham 
 khảo ₫ến ₫ối tượng Receiver chứa dữ liệu và tác vụ chức năng có liên 
 quan.
. Invoker (MenuItem): ₫ối tượng gửi request ₫ến ₫ối tượng ICommand 
 ₫ể nhờ thực hiện hành vi tương ứng.
. Client (Application) : module khởi tạo ₫ối tượng Command cụ thể và 
 gởi cho nó tham khảo ₫ến ₫ối tượng Receiver.
. Receiver (Document, Application) : chứa dữ liệu và tác vụ chức năng 
 có liên quan ₫ến hành vi mà ₫ối tượng Command cần thực hiện.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 36
8.7 Mẫu Observer
Mục tiêu :
. Định nghĩa sự phụ thuộc 1-n giữa các ₫ối tượng sao cho khi 1 ₫ối 
 tượng trung tâm bị thay ₫ổi nội dung (trạng thái) thì n ₫ối tượng phụ 
 thuộc nó ₫ược cảnh báo hầu hiệu chỉnh tự ₫ộng theo ₫ồi tượng 
 trung tâm, nhờ ₫ó ₫ảm bảo ₫ược tính nhất quán giữa chúng.
. Thường ₫ối tượng trung tâm là ₫ối tượng chứa dữ liệu bên trong 
 ứng dụng, còn n ₫ối tượng phụ thuộc nó là những ₫ối tượng giao 
 diện của ứng dụng. Nội dung của các ₫ối tượng giao diện ₫ược 
 chứa và quản lý bởi ₫ối tượng bên trong ứng dụng.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 37
8.7 Mẫu Observer
Thí dụ về việc dùng mẫu Observer :
. Trong ứng dụng quản lý bảng tính (MSExcel), mỗi bảng tính là 1 
 bảng dữ liệu của 1 database tương ứng (ta gọi là workbook hay file 
 *.xls). Ta có thể hiển thị nội dung của bảng dữ liệu trên nhiều ₫ối 
 tượng giao diện khác nhau, thí dụ như spreadsheet (bảng nội 
 dung chi tiết 2 chiều), barchart (biểu ₫ồ vạch), piechart (biểu ₫ồ 
 bánh),... 
. Mỗi khi bảng dữ liệu bên trong phần mềm thay ₫ổi nội dung bởi ai 
 ₫ó (có thể do phần mềm khác), nó phải gởi cảnh báo (notify) ₫ến 
 mọi ₫ối tượng giao diện có dùng nội dung của nó ₫ể các ₫ối tượng 
 này kịp thời hiển thị lại nội dung mới.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 38
8.7 Mẫu Observer
Thí dụ về việc dùng mẫu Observer :
. Tương tự, nếu ₫ối tượng giao diện nào cho phép người dùng cập 
 nhật nội dung (spreadsheet), thì mỗi khi user cập nhật nội dung, 
 nó không ₫ược cập nhật cục bộ mà phải gởi yêu cầu cập nhật nội 
 dung về ₫ối tượng trung tâm, chỉ có ₫ối tượng này mới có quyền 
 quyết ₫ịnh cập nhật hay không, nếu nó cập nhật nội dung thì nội 
 dung sẽ bị thay ₫ổi và như thế nó phải gởi cảnh báo cho mọi ₫ối 
 tượng phụ thuộc nó biết. 
. Cách tốt nhất ₫ể giải quyết vấn ₫ế trên là dùng mẫu thiết kế 
 Observer với lược ₫ồ class như sau :
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 39
8.7 Mẫu Observer
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 40
8.7 Mẫu Observer
Ta có thể xây 
dựng mẫu 
Observer theo 
loại object 
pattern với 
lược ₫ồ class 
như sau :
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 41
8.7 Mẫu Observer
Các phần tử tham gia :
. IObservable : interface của ₫ối tượng trung tâm (₫óng vai trò 1 trong 
 mối quan hệ 1-n), nó chứa các tác vụ attach, detach từng ₫ối tượng 
 phụ thuộc nó vào danh sách quản lý; tác vụ notify() gởi cảnh báo 
 cho từng ₫ối tượng phụ thuộc khi có sự thay ₫ổi nội dung; tác vụ 
 updateData() nhận yêu cầu thay ₫ổi nội dung và xử lý yêu cầu.
. Observable (WorksheetData) : class ₫ặc tả ₫ối tượng trung tâm, nó 
 hiện thực interface IObservable.
. IObserver : interface thống nhất của các ₫ối tượng phụ thuộc vào 
 ₫ối tượng trung tâm.
. Observer1 (PieChart) : class ₫ặc tả ₫ối tượng phụ thuộc cụ thể.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 42
8.8 Kết chương
 Chương này ₫ã giới thiệu các thông tin cơ bản về nhóm mẫu
 phục vụ che dấu hành vi, thuật giải trong ₫ối tượng (Behavioral
 Patterns) và thông tin chi tiết cụ thể về các mẫu Chain of
 Responsibility, Template Method, Strategy, State, Command,
 Observer.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng
 © 2010 Slide 43

File đính kèm:

  • pdfbai_giang_cac_mau_thiet_ke_huong_doi_tuong_chuong_8_cac_mau.pdf