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

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

15.2 Mẫu Chain of Responsibility

15.3 Mẫu Template Method

15.4 Mẫu Strategy

15.5 Mẫu State

15.6 Mẫu Command

15.7 Mẫu Observer

15.8 Kết chương

pdf 22 trang phuongnguyen 6020
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình hướng đối tượng - Chương 15: Các mẫu thiết kế che dấu hành vi, thuật giải trong đối tượng (Behavioral 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 Lập trình hướng đối tượng - Chương 15: Các mẫu thiết kế che dấu hành vi, thuật giải trong đối tượng (Behavioral Patterns)

Bài giảng Lập trình hướng đối tượng - Chương 15: Các mẫu thiết kế che dấu hành vi, thuật giải trong đối tượng (Behavioral Patterns)
 Chương 15
 Các mẫuthiếtkế che dấu hành vi, thuậtgiải
 trong ₫ốitượng (Behavioral Patterns)
 15.1 Tổng quát về nhóm mẫu “Behavioral Patterns”
 15.2 Mẫu Chain of Responsibility
 15.3 Mẫu Template Method
 15.4 Mẫu Strategy
 15.5 Mẫu State
 15.6 Mẫu Command
 15.7 Mẫu Observer
 15.8 Kếtchương
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 1
15.1 Tổng quát về nhóm mẫu “Behavioral Patterns”
‰ Trong ₫oạn code giải quyếtvấn ₫ề của ứng dụng, khi cầnphải
 chọnlựa 1 trong nhiềuthuậtgiả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ậtgiải/hành vi 1
 case ALG2 : //₫oạn code miêu tả thuậtgiải/hành vi 2
 case ALGn : //₫oạn code miêu tả thuậtgiải/hành vi n
 }
‰ Đoạn code trên có nhiều khuyết ₫iểmnhư : phu thuộc hoàn toàn
 vào số lượng thuậtgiải/hành vi, vào chi tiếtcụ thể củatừng thuật
 giải/hành vi, phảihiệuchỉnh khi số lượng/chi tiếtcủathuật
 giải/hành vi bị thay ₫ổi.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 2
15.1 Tổng quát về nhóm mẫu “Behavioral Patterns”
‰ Để khắcphục các nhược ₫iểmcủacáchlậptrìnhcổ₫iển trong
 slide trước, cách tốtnhất là dùng 1 trong các mẫuthuộcnhóm
 “Behavioral Patterns”. 
‰ Nhiệmvụ củacácmẫuthuộc nhóm “” là che dấucác₫oạn code 
 miêu tả thuậtgiải/hành vi vào trong các ₫ốitượng, code của client 
 chỉ giữ tham khảo ₫ến ₫ốitượng và gởi thông ₫iệpnhờ₫ốitượng
 thựchiệnthuậtgiải/hành vi cụ thể khi cầnthiết.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 3
15.2 Mẫu Chain of Responsibility
Mụctiêu:
 ƒ Mẫu dây chuyền trách nhiệm (Chain of Responsibility) giúp
 tránh ₫ượcviệcgắnkếtcứng giữaphầntử gởi request (Client) 
 vớiphầntử nhậnvàxử lý request (Server) bằng cách cho phép
 hơn1 ₫ốitượng có cơ hộixử lý request ₫ó. Các ₫ốitượng nhận
 và xử lý request sẽ ₫ượcliênkếtlạ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 : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 4
15.2 Mẫu Chain of Responsibility
Thí dụ về việcdùngmẫ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ủa1 phầntử giao diệnnào₫ótrựctiếptừ phầntử
 ₫óbằng cách ấnphảichuột vào nó. Lưu ý là các ₫ốitượng giao
 diệnthường ₫ượctổ chức theo dạng cây thứ bậc: 1 chương trình có
 nhiềucửasổ giao diện, mỗicửasổ giao diệnchứanhiều ₫ốitượng
 giao diện, mỗi ₫ốitượng giao diệncóthể là group chứa nhiều ₫ối
 tượng giao diện con Tóm lạisố lượng các ₫ốitượng giao diện ₫ơn
 (không chứa ₫ốitượng khác nữa) củachương trình thường rấtlớn, 
 chi phí hiệnthựctấtcả sự trợ giúp cho tấtcả các ₫ốitượng ₫ơnnày
 sẽ rấtlớn, do ₫óthường sẽ ₫ượchiệnthựctừ từ thông qua nhiều
 version mới ₫ạt ₫ượcsự 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ốtmọi
 yêu cầutrợ giúp theo ngữ cảnh trên mọi ₫ốitượng giao diện.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 5
15.2 Mẫu Chain of Responsibility
Cách tốtnhất ₫ể giải
quyếtvần ₫ề trên là
dùng mẫuChain of 
Responsibility vớilược
₫ồ class như sau :
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 6
 15.2 Mẫu Chain of Responsibility
 Lược ₫ồ ₫ốitượ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 : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 7
 15.2 Mẫu Chain of Responsibility
Theo lược ₫ồ ₫ốitượng của Button như trên thì khi user ấnphảichuột
vào button ₫ể xem trợ giúp về button ₫óthì:
 ƒ Hoặclàhàmxử lý HandleHelp() của chính button ₫óchạy(nếucó
 hiệnthực) ₫ể hiểnthị nội dung trợ giúp chính xác về button ₫ó.
 ƒ Hoặclàhàmxử lý HandleHelp() của ₫ốitượng chứa button sẽ chạy
 (GroupBox - nếucóhiệnthực) ₫ể hiểnthị 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ệnthự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ệnthực hàm xử lý HandleHelp() thì cuối cùng hàm xử lý
 HandleHelp() củachương trình sẽ chạy. Trong trường hợp này user 
 sẽ xem ₫ượcnội dung trợ giúp của toàn phầnmề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 : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 8
 15.2 Mẫu Chain of Responsibility
 Ta có thể xây dựng
 mẫu Chain of 
 Responsibility theo loại
 object pattern vớilược
 ₫ồ class như sau :
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 9
 15.2 Mẫu Chain of Responsibility
Các phầntử tham gia :
ƒ IService (IHelpHandler) : ₫ịnh nghĩa interface củatácvụ xử lý
 request.
ƒ AbstractService (Widget) : ₫ặctả các thành phần dùng chung cho tất
 cả₫ốitượng xử lý request, thí dụ thuộctínhthamkhảo ₫ến ₫ốitượng
 ₫i sau mình trong dây chuyềnxử lý, hiệnthựctácvụ request() với
 nhiệmvụ cơ bảnnhấtlàgọitácvụ này của ₫ốitượng mà mình tham
 khảotrựctiếp.
ƒ ConcreteService1 (Button) : hiệnthựctácvụ request() theo yêu
 cầuriêngcủa mình theo ý tưởng chung như sau : nếucóthể xử lý
 ₫ược request, nó sẽ xử lý, nếu không thì gởitiếp request cho ₫ối
 tượng ₫isaugiải quyết.
ƒ Client : chứa tham khảo ₫ến ₫ốitượng ₫ầu tiên trong dây chuyền ₫ể
 mỗilầncầnthựchiện request, nó sẽ gởi thông ₫iệptới ₫ốitượng này.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 10
15.3 Mẫu Template Method
Mụctiêu:
 ƒ Định nghĩagiảithuậttổng quát ₫ể giải quyếtvấn ₫ề nào ₫ó
 trong mộttácvụ, trong giảithuậttổng quát này có gọi1 số tác
 vụ chứcnăng cơ bản nào ₫ó ₫ể thựchiệncôngviệc theo yêu
 cầucủagiảithuậttổng quát, tuy nhiên các tác vụ cơ bản ₫ược
 gọisẽ ₫ượchiệnthực sau trong các class con, chứ class hiện
 hành cũng chưabiết chúng sẽ làm gì cụ thể.
 ƒ Như chúng ta ₫ã trình bày nhiềulần trong tài liệu này, một trong
 các mục tiêu chính củaviệcviếtchương trình là phảiviết ₫ược
 ₫oạn code giảiquyết ₫úng chứcnăng và có tính tổng quát hóa
 cao ₫ể hạnchế tối ₫aviệchiệuchỉnh lại. Mẫu Template 
 Method là 1 trong những biệnpháphỗ trợ mục tiêu này.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 11
15.3 Mẫu Template Method
Thí dụ về việcdùngmẫu Template Method :
ƒ Giả sử ta muốnviếtchương trình quảnlýhệ thống file 
 (FileManagerApp) cho phép user thựcthựchiện1 số tác vụ xử lý
 hệ thống file như xóa file ₫ệ qui từ 1 thư mụcxác₫ịnh; ₫ếmsố
 lượng file con, cháu, chắtcủa 1 thư mục; tìm và diệtvirus tấtcả
 các file từ thư mụcxác₫ịnh
ƒ Phân tích các chứcnăng củachương trình xử lý hệ thống file ta
 phát hiện1 số ý tưởng sau :
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 12
15.3 Mẫu Template Method
Thí dụ về việcdùngmẫu Template Method :
ƒ Mỗichứcnăng cần 1 form giao diệnvớiuser, nhưng may mắnlà
 các form giao diệnphụcvụ các chứcnăng ₫ều khá giống nhau về
 số lượng và tính chất các phầntử giao diện. Cụ thể mỗi form cần
 chứacác₫ốitượng giao diệnnhư : Button ₫ể giúp user duyệtchọn
 thư mụcxuất phát, TextBox ₫ể hiểnthị ₫ường dẫnthư mụcxuất
 phát, TextBox ₫ể giúp user ₫ặctả pattern về các phầntử cầnxử lý
 (*, *.exe,), Button ₫ể user kích hoạtviệcthựchiệnchứcnăng, 
 ListBox ₫ể hiểnthị thông tin về kếtquả xử lý
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 13
15.3 Mẫu Template Method
Thí dụ về việcdùngmẫu Template Method :
ƒ Mỗichứcnăng cầnphải duyệt ₫ệ qui hệ thống file, bắt ₫ầutừ thư
 mụcchỉ₫ịnh bởi user, ₫ể lầnlượtgặptừng file rồithựchiệnhoạt
 ₫ộng xử lý xác ₫ịnh trên file ₫ó.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 14
 15.3 Mẫu Template Method
 Cách tốtnhất ₫ể
 xây dựng chương
 trình trên là dùng
 mẫu Template 
 Method vớilược ₫ồ
 class như sau :
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 15
 15.3 Mẫu Template Method
Class FileCommandDlg ₫ặctả form giao diệntổng quát cho mọichức
năng, nó có 4 tác vụ miêu tả các giảithuậttổng quát ₫ược dùng chung
cho mọi class con, ta gọicáctácvụ này là “template method” :
 ƒ FileCommandDlg() chứagiảithuậttạoform, tạocác₫ốitượng con 
 trong form và thêm chúng vào form ở vị trí và kích thướcmong
 muốn. Lệnh cuốicùngcủagiảithuậttạoform tổng quát này sẽ gọi
 hàm initForm() ₫ể hiệuchỉnh nội dung chuỗivănbản ₫ượchiểnthị
 kèm theo từng phầntử giao diện sao cho phù hợpvớichứcnăng
 ₫ặc thù.
 ƒ Lưu ý là trong các môi trường lậptrìnhtrựcquannhư Visual Studio 
 .Net, ngườilậptrìnhsẽ dùng tiện ích thiếtkế trực quan form giao
 diệnchodễ 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ầuthiếtkế củauser.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 16
15.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ệmvụ chung là hiểnthị cửasổ duyệt
 chọnthư mụcxuấ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ệmvụ chung là thựchiệnchứcnăng trên thư
 mụcxuất phát. Giảithuậtcủatácvụ này gồm3 bước công việc: 
 prolog() → browseTree() → epilog().
 ƒ browseTree() chứagiảithuật duyệttừng file 1 cách ₫ệ qui, xuất
 phát từ thư mụcxuất phát do user chỉ₫ịnh, mỗilầngặp 1 file thì sẽ
 gọitácvụ action() thựchiện hành vi nào ₫ó lên file.
 ƒ Các tác vụ initForm(), prolog(), action(), epilog() ₫ược dùng trong
 giảithuậtcủatácvụ template method nhưng sẽ ₫ượctừng class 
 con ₫ặctả cụ thể theo yêu cầuchứcnăng ₫ặcthùcủa class con 
 ₫ó. Ta gọicáctácvụ này là “primitive function”.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 17
15.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 : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 18
15.3 Mẫu Template Method 
Các phầntử tham gia :
ƒ ITemplate (Form) : ₫ịnh nghĩa interface thống nhấtcủa các class 
 chứcnăng cần dùng, interface này thường chứanhiềutácvụ chức
 năng có tính chất chung như sau : ₫ể thựchiệnchứcnăng ta sẽ
 dùng giảithuậttổng quát. Như vậycáctácvụ chứcnăng trong
 interface thường là các “template method”. 
ƒ AbstractClass (FileCommandDlg) : ₫ặctả class cha dùng chung, 
 class này chứacáctácvụ “template method”, mỗitácvụ “template 
 method” miêu tả giảithuậttổng quát ₫ể thựchiệnchứcnăng tương
 ứng, trong giảithuậttổ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 : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 19
15.3 Mẫu Template Method 
Các phầntử 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ầuxử lý ₫ặcthùcủa mình. Các class con này không cầnvà
 không ₫ược phép override các tác vụ “template method” ₫ã ₫ược
 ₫ặctả 1 lần ở class cha.
ƒ Client (FileManagerApp) : miêu tả₫oạn code của client sử dụng
 các chứcnăng khác nhau.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 20
15.4 Mẫu Strategy
Mụctiêu:
ƒ Cung cấpmộthọ giảithuật khác nhau ₫ể giải quyết cùng 1 vấn ₫ề
 nào ₫ó và cho phép Client chọnlựalinh₫ộng dễ dàng mộtgiải
 thuậtcụ thể theo từng tình huống sử dụng.
ƒ Về nguyên lý chung, thường có nhiềugiảithuật khác nhau cùng
 giảiquyết ₫ược 1 bài toán. Mỗigiảithuậtcónhững ưu khuyết ₫iểm
 riêngvàsẽ thích hợphơn trong ngữ cảnh sử dụng nào ₫óso với
 các giảithuậtcònlại. Cách tốtnhất ₫ể giúp Client chọnlựalinh
 ₫ộng và dễ dàng 1 giảithuật phù hợp theo từng tình huống là dùng
 mẫuStrategy.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 21
15.4 Mẫu Strategy
Thí dụ về việcdùngmẫu Strategy :
ƒ Thí dụ₫ểsắpxếpthứ tự các phầntử trong 1 danh sách, ta có
 nhiềugiảithuậtsắpxếp khác nhau như sắptuầntự, bubblesort, 
 nhị phân, Cách tốtnhất ₫ể thiếtlậplinh₫ộng giảithuậtsắpxếp
 cho danh sách và giúp code củacáctácvụ chứcnăng trong ₫ối
 tượng danh sách hoàn toàn ₫ộclậpvớigiảithuậtsắpxếpthứ tự là
 dùng mẫu Strategy vớilược ₫ồ class như sau :
ƒ Đốitượng danh sách có 1 tham khảo ₫ến ₫ốitượng thựchiệnsắp
 xếpthứ tự các phầntử, tùy yêu cầucụ thể, ta tạo ₫ốitượng chứa
 giảithuậtsắpxếp mong muốn và gán tham khảo ₫ến ₫ốitượng
 này vào thuộc tính tham khảocủa ₫ốitượng danh sách. Mỗilần
 cầnsắpxếpthứ tự các phầntử trong danh sách của mình, nó gởi
 thông ₫iệp sStart.sort(this) ₫ể kích hoạttácvụ sắpxếpthứ tự chứ
 nó không biết chính xác giảithuậtsắpxếpnàosẽ chạy.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 22
15.4 Mẫu Strategy
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 23
15.4 Mẫu Strategy
Ta có thể xây dựng mẫu Strategy theo loại object pattern vớilược ₫ồ
class như sau :
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 24
15.4 Mẫu Strategy
Các phầntử tham gia :
ƒ IStrategy (ISortStrategy) : ₫ịnh nghĩa interface cho tấtcả các class 
 thể hiệngiảithuậtthựchiện1 chứcnăng xác ₫ịnh nào ₫ó. 
ƒ Strategy1 (BinarySort) : class miêu tả giảithuậtcụ thể₫ểgiải
 quyếtchứcnăng. Nó thường nhận tham khảo ₫ến Client (₫ối
 tượng Subject) trong lúc ₫ượckhởitạo ₫ể thông qua tham khảo
 này, nó truy xuấtdữ liệucủa Client hầuphụcvụ giảithuậtchức
 năng của mình.
ƒ Subject (List) : class ₫ặctả Client có sử dụng giảithuậtdo 
 các class Strategy hiệnthực.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 25
15.5 Mẫu State
Mụctiêu:
ƒ Về nguyên lý chung, hành vi của ₫ốitượng có thể phụ thuộcvào
 trạng thái hiện hành của ₫ốitượng ₫ó. Cách tốtnhất ₫ể giúp ₫ối
 tượng thay ₫ổilinh₫ộng và dễ dàng 1 hành vi phù hợptheotừng
 trạng thái là dùng mẫu State.
ƒ Cho phép 1 ₫ốitượng thay ₫ổi hành vi khi trạng thái bên trong của
 nó thay ₫ổi. Ta có cảmgiácnhư class của ₫ốitượng bị thay ₫ổi.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 26
15.5 Mẫu State
Thí dụ về việcdùngmẫu State :
ƒ Thí dụ trong class TCPConnection miêu tả 1 mốinốimạng, ₫ối
 tượng TCPConnection có thểở1 trong nhiềutrạng thái : 
 Established, Listening, Closed. Khi ₫ốitượ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ốtnhất ₫ể giảiquyếtyêucầ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 : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 27
15.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 : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 28
15.5 Mẫu State
Ta có thể xây dựng mẫu State theo loại object pattern vớilượ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 : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 29
15.5 Mẫu State
Các phầntử tham gia :
ƒ Context (TCPConnection) : ₫ịnh nghĩa interface cầndùngcho
 client. Duy trì 1 tham khảo ₫ến ₫ốitượng của 1 class con 
 ConcreteState mà ₫ịnh nghĩatrạng thái hiện hành.
ƒ IState (ITCPState) : ₫ịnh nghĩa interface nhằm bao ₫óng hành vi 
 kếthợpvớitrạng thái cụ thể. Duy trì 1 tham khảo ₫ến ₫ốitượng
 của 1 class con ConcreteState mà ₫ịnh nghĩatrạng thái hiện
 hành.
ƒ ConcreteState (TCPEstablished, TCPListen, TCPClose) : ₫ịnh
 nghĩavàchedấuhànhvi cụ thể kếthợpvớitrạng thái của mình.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 30
15.6 Mẫu Command
Mụctiêu:
ƒ Đóng gói ₫oạn code phụcvụ 1 yêu cầuxác₫ịnh của Client trong
 một ₫ốitượng, nhờ₫ócóthể thông số hóa ₫oạn code nhậnvàthực
 hiện các thao tác trên request như sắpxếp, ghi logfile, undo,
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 31
15.6 Mẫu Command
Thí dụ về việcdùngmẫu Command :
ƒ Chươngtrìnhcógiaodiện ₫ồ họatrực quan thường dùng nhiều
 cửasổ giao diện, mỗicửasổ thường có 1 thanh menubar chứa
 nhiều menu dạng pop-up, mỗi menu pop-up chứa nhiềumụcchức
 năng, mỗimụcchứcnăng có thể là 1 menu pop-up con Cuối
 cùng mỗimụcchứcnăng cơ bản ₫ược dùng ₫ể kích hoạtchức
 năng tương ứng. Yêu cầuphổ biếnvề thanh menubar củacửasổ
 chứcnăng là nó có thể ₫ượchiệuchỉnh ₫ộng theo thờigian
 (thêm/bớt/thay ₫ổitừng thành phần trong thanh menu), hoặcthậm
 chí muốn thay ₫ổihànhvi ₫áp ứng vớitừng mụcchứcnăng hiện
 có trong thanh menubar. Cách tốtnhất ₫ể giảiquyếtvấn ₫ề này là
 dùng mẫu Command vớilược ₫ồ class như sau :
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 32
15.6 Mẫu Command
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 33
15.6 Mẫu Command
 ƒ Mỗi ₫oạn code thựchiệnchứcnăng nào ₫ósẽ ₫ược ₫ặt trong tác
 vụ execute() của 1 class tương ứng, các class này ₫ềuhỗ trợ
 cùng interface thống nhất ICommand. 
 ƒ Mỗi ₫ốitượng giao diện (Button, mụcchứcnăng của menu pop-
 up,) chứa 1 tham khảo ₫ến ₫ốitượng ICommand, hàm xử lý sự
 kiện Click chuộttrênnóluôn₫ượcviếtnhư sau : cmd.execute(); 
 Lệnh này sẽ kích hoạttácvụ execute() của ₫ốitượng ₫ược tham
 khảohiện hành chạy, còn ₫ốitượng ₫ược tham khảolàailàtùy
 theo hành vi cụ thể nào cầnthựchiện.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 34
 15.6 Mẫu Command
 Ta có thể xây dựng
 mẫu Command 
 theo loại object 
 pattern vớilược ₫ồ
 class như sau :
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 35
 15.6 Mẫu Command
Các phầntử tham gia :
ƒ ICommand : interface thống nhấtchomọi ₫ốitượng xử lý request, nó
 chứaítnhất1 tácvụ execute() ₫ể thựchiện hành vi ₫ượcyêucầutừ
 client.
ƒ Command1 (PasteCommand, OpenCommand) : class ₫ặctả
 giảithuậtthựchiện hành vi cụ thể, nó thường có thuộctínhtham
 khảo ₫ến ₫ốitượng Receiver chứadữ liệuvàtácvụ chứcnăng có liên
 quan.
ƒ Invoker (MenuItem): ₫ốitượng gửi request ₫ến ₫ốitượng ICommand
 ₫ể nhờ thựchiện hành vi tương ứng.
ƒ Client (Application) : module khởitạo ₫ốitượng Command cụ thể và
 gởi cho nó tham khảo ₫ến ₫ốitượng Receiver.
ƒ Receiver (Document, Application) : chứadữ liệuvàtácvụ chứcnăng
 có liên quan ₫ếnhànhvi mà₫ốitượng Command cầnthựchiện.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 36
15.7 Mẫu Observer
Mụctiêu:
ƒ Định nghĩasự phụ thuộc1-n giữacác₫ốitượng sao cho khi 1 ₫ối
 tượng trung tâm bị thay ₫ổinội dung (trạng thái) thì n ₫ốitượng phụ
 thuộcnó₫ượccảnh báo hầuhiệuchỉnh tự₫ộng theo ₫ồitượng
 trung tâm, nhờ₫ó ₫ảmbảo ₫ược tính nhất quán giữachúng.
ƒ Thường ₫ốitượng trung tâm là ₫ốitượng chứadữ liệu bên trong
 ứng dụng, còn n ₫ốitượng phụ thuộcnólànhững ₫ốitượng giao
 diệncủa ứng dụng. Nội dung củacác₫ốitượng giao diện ₫ược
 chứavàquảnlýbởi ₫ốitượng bên trong ứng dụng.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 37
15.7 Mẫu Observer
Thí dụ về việcdùngmẫu Observer :
ƒ Trong ứng dụng quảnlýbảng tính (MSExcel), mỗibảng tính là 1 
 bảng dữ liệucủa 1 database tương ứng (ta gọi là workbook hay file 
 *.xls). Ta có thể hiểnthị nội dung củabảng dữ liệutrênnhiề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ỗikhibảng dữ liệu bên trong phầnmềm thay ₫ổinội dung bởiai
 ₫ó(cóthể do phầnmềm khác), nó phảigởicảnh báo (notify) ₫ến
 mọi ₫ốitượng giao diện có dùng nội dung củanó₫ể các ₫ốitượng
 này kịpthờihiểnthị lạinội dung mới.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 38
15.7 Mẫu Observer
Thí dụ về việcdùngmẫu Observer :
ƒ Tương tự, nếu ₫ốitượng giao diện nào cho phép ngườidùngcập
 nhậtnội dung (spreadsheet), thì mỗi khi user cậpnhậtnội dung, 
 nó không ₫ượccậpnhậtcụcbộ mà phảigởiyêucầucậpnhậtnội
 dung về₫ốitượng trung tâm, chỉ có ₫ốitượng này mới có quyền
 quyết ₫ịnh cậpnhật hay không, nếunócậpnhậtnội dung thì nội
 dung sẽ bị thay ₫ổivànhư thế nó phảigởicảnh báo cho mọi ₫ối
 tượng phụ thuộcnóbiết. 
ƒ Cách tốtnhất ₫ể giảiquyếtvấn ₫ế trên là dùng mẫuthiếtkế
 Observer vớilược ₫ồ class như sau :
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 39
15.7 Mẫu Observer
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 40
15.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 : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 41
15.7 Mẫu Observer
Các phầntử tham gia :
ƒ IObservable : interface của ₫ốitượng trung tâm (₫óng vai trò 1 trong
 mối quan hệ 1-n), nó chứacáctácvụ attach, detach từng ₫ốitượng
 phụ thuộc nó vào danh sách quảnlý; tácvụ notify() gởicảnh báo
 cho từng ₫ốitượng phụ thuộc khi có sự thay ₫ổinội dung; tác vụ
 updateData() nhậnyêucầu thay ₫ổinội dung và xử lý yêu cầu.
ƒ Observable (WorksheetData) : class ₫ặctả₫ốitượng trung tâm, nó
 hiệnthực interface IObservable.
ƒ IObserver : interface thống nhấtcủacác₫ốitượng phụ thuộcvào
 ₫ốitượng trung tâm.
ƒ Observer1 (PieChart) : class ₫ặctả₫ốitượng phụ thuộccụ thể.
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 42
15.8 Kếtchương
‰ Chương này ₫ãgiớithiệu các thông tin cơ bảnvề nhóm mẫu
 phụcvụ che dấu hành vi, thuậtgiải trong ₫ốitượng (Behavioral 
 Patterns) và thông tin chi tiếtcụ thể về các mẫuChain of 
 Responsibility, Template Method, Strategy, State, Command, 
 Observer. 
 Khoa Khoa học& Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 15 : Các mẫuthiếtkế che dấu hành vi, thuậtgiải trong ₫ốitượng
 © 2010 Slide 43

File đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_chuong_15_cac_mau_thiet.pdf