Bài giảng Lập trình hướng đối tượng - Chương 13: Các mẫu thiết kế phục vụ tổ chức cấu trúc các đối tượng (Structural Patterns)

13.1 Tổng quát về mẫu thiết kế HĐT

13.2 Mẫu Adapter

13.3 Mẫu Composite

13.4 Mẫu Proxy

13.5 Mẫu Decorator

13.6 Mẫu Facade

13.7 Mẫu Flyweight

13.8 Kết chương

pdf 28 trang phuongnguyen 7980
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 13: Các mẫu thiết kế phục vụ tổ chức cấu trúc các đối tượng (Structural 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 13: Các mẫu thiết kế phục vụ tổ chức cấu trúc các đối tượng (Structural Patterns)

Bài giảng Lập trình hướng đối tượng - Chương 13: Các mẫu thiết kế phục vụ tổ chức cấu trúc các đối tượng (Structural Patterns)
 Chương 13
 Các mẫuthiếtkế phụcvụ tổ chứccấu trúc các ₫ối
 tượng (Structural Patterns)
 13.1 Tổng quát về mẫuthiếtkế HĐT 
 13.2 MẫuAdapter
 13.3 Mẫu Composite
 13.4 MẫuProxy
 13.5 Mẫu Decorator
 13.6 Mẫu Facade
 13.7 Mẫu Flyweight
 13.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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 1
13.1 Tổng quát về mẫuthiếtkế HĐT 
‰ Trong việc phát triển1 phầnmềm, ta thường thựchiện các hoạt
 ₫ộng chứcnăng sau ₫ây :
 1. Nắmbắtyêucầuphầnmềm
 2. Phân tích từng chứcnăng
 3. Thiếtkế
 4. Hiệnthực (hay viết code) 
 5. Kiểmthử
‰ Các hoạt ₫ộng trên có mối quan hệ phụ thuộc nhau, cụ thể kết
 quả củabướci làdữ liệu ₫ầuvàocủabướcthứ i+1. Do ₫ónếu
 bướcthứ i có lỗi, nghĩalàkếtquả củanókhông₫úng thì sẽ kéo
 theo các bướcsau₫ósẽ bị lỗichodùtacố gắng thựchiện chúng
 tốtcáchgì₫inữa. 
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 2
13.1 Tổng quát về mẫuthiếtkế HĐT 
‰ Như vậy, lỗi ở bước ₫ầutiênlànguyhạinhất, kế₫ólàlỗi ở bước
 thức2, thứ 3, ... Tuy nhiên, các bướcnắmbắtyêucầu và phân
 tích chứcnăng thường chỉ tạorakếtquả ít, chưacó₫ộ phứctạp
 cao, do ₫ótavẫncócáchkiểm soát ₫ể những kếtquả này ít có lỗi
 nhất. Còn bắt ₫ầutừ bướcthiếtkế trở₫i, kếtquả sẽ nhiềuvàcó
 ₫ộ phứctạpcaohơn nên sẽ khó kiểm soát hơn. Và nếucólỗi ở
 bước này thì rất nguy hạivìsẽ kéo theo hoạt ₫ộng hiệnthực
 không có ý nghĩagìnữa.
‰ Tóm lại, thiếtkế phầnmềmlàmộtvấn ₫ề rấtkhókhăn, nhấtlàkhi
 phầnmềmlớn, mối quan hệ giữa các phầntử sẽ nhiềuvàphức
 tạp, bảnthiếtkế thường không hiệuquả và chứanhiềulỗikhó
 biết. Hơnnữa, ta thường phảitrả giá cao cho các lỗithiếtkế vì
 chúng ảnh hưởng nặng nề₫ến các giai ₫oạn sau như viết code, 
 kiểmthử.
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 3
13.1 Tổng quát về mẫuthiếtkế HĐT 
‰ Dùng phương pháp thiếtkế hướng ₫ốitượng sẽ giúp ta có thể thiết
 kế ₫ượcphầnmềmcócấu trúc rõ ràng, mạch lạc, nhờ₫ótadễ
 phát hiệnlỗinếucó, dễ hiệuchỉnh, dễ nâng cấptừng thành phần
 (thí dụ nhờ tính bao ₫óng, bao gộp, thừakế, ₫axạ, tổng quát
 hóa). 
‰ Tuy nhiên việcthiếtkế phầnmềm HĐT còn phụ thuộcnhiềuvào
 khả năng ngườithiếtkế, không phảiaithiếtkế₫ềutạo ₫ược
 những kếtquả tích cựcnhư₫ã nêu trê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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 4
13.1 Tổng quát về mẫuthiếtkế HĐT 
‰ Hiệnnay, hoạt ₫ộng thiếtkế phầnmềmlàphải ₫ạt ₫ược3 miêu
 tiêu chính sau ₫ây (trong nhiềumục tiêu khác) :
 ƒ Mục tiêu 1 : thiếtkế ₫ượcphầnmềmgiảiquyết ₫úng các chức
 năng mà user yêu cầu. Đây là mục tiêu chính yếunhất.
 ƒ Mục tiêu 2 : phảihạnchế ₫ượcviệctáithiếtkế lại trong tương
 lai, cho dù vì lý do gì.
 ƒ Mục tiêu 3 : bảnthiếtkế hiệnhànhphảihỗ trợ tốtnhấtviệctái
 thiếtkế lạinếu vì lý do gì ₫óphảitáithiếtkế lạiphầnmềm.
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 5
13.1 Tổng quát về mẫuthiếtkế HĐT 
Có nhiều nguyên nhân dẫn ₫ếntáithiếtkế phầnmềm (PM) :
ƒ Do PM phụ thuộc vào phầncứng, hệ₫iều hành (OS) hay PM khác
 : PM càng dùng trựctiếp các thông số phầncứng hay PM liên
 quan sẽ phải thay ₫ổi khi các thông số này thay ₫ổi.
ƒ Do PM phụ thuộc vào giảithuật : khi PM có nhiềugiải pháp, nhiều
 mức ₫ộ xử lý cho cùng mộtvấn ₫ề, việc ràng buộcchặtchẽ PM 
 vớigiải pháp cụ thể sẽ dẫn ₫ếnkhóbổ sung, thay ₫ổiPM.
ƒ Do PM chưacótínhtổng quát hóa. Thí dụ tiện ích gỏ phím tiếng
 Việtlúc₫ầuchỉ hỗ trợ nhậpliệu theo 1 cách gỏ cụ thể, nếumuốn
 PM này hỗ trợ gỏ nhiều cách khác, ngay cả cách do user tự₫ặtthì
 phảithiếtkế lạiPM gỏ phím.
ƒ Các thành phầncủa PM liên quan nhau quá chặtchẽ : hiệuchỉnh, 
 nâng cấp 1 thành phầnthường phải thay ₫ổicácthànhphầnphụ
 thuộctrựctiếpvàgiántiếpnótheokiểu dây chuyề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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 6
13.1 Tổng quát về mẫuthiếtkế HĐT 
‰ Mộtbiện pháp ₫ược ₫ề xuất ₫ể có những bảnthiếtkế tốt, hạnchế
 ₫ượcviệctáithiếtkế lạivàkhicầnthiếtkế lại, nó phảihỗ trợ tốt
 nhấtviệctáithiếtkế là sử dụng lạinhững mẫuthiếtkế hướng ₫ối
 tượng (Object Oriented Design Patterns), hay gọitắtlàmẫuthiết
 kế (Design Patterns).
‰ Vậymẫuthiếtkế là gì ? Mẫuthiếtkế có các ₫ặc ₫iểmsau: 
 ƒ Là bảnthiếtkế củanhững người chuyên nghiệpvànổitiếng, 
 ₫ã ₫ượcsử dụng trong các phầnmềm ₫ang ₫ượcdùngphổ
 biếnvà₫ượcngười dùng ₫ánh giá tốt.
 ƒ Giúp giải quyết 1 trong những vấn ₫ề thiếtkế thường gặptrong
 các phầnmềm.
 ƒ Giúp cho bảnthiếtkế phầnmềmcótínhuyển chuyểncao, dễ
 hiệuchỉnh và dễ nâng cấp.
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 7
13.1 Tổng quát về mẫuthiếtkế HĐT 
Vai trò củamẫuthiếtkế : mẫuthiếtkế₫óng 1 số vai trò chính yếu
như sau : 
 ƒ Cung cấpphương pháp giải quyếtnhững vấn ₫ề thựctế
 thường gặp trong phầnmềmmàmọingười ₫ã ₫ánh giá, kiểm
 nghiệmlàrấttốt. 
 ƒ Là biệnpháptáisử dụng tri thức các chuyên gia phầnmềm.
 ƒ Hình thành kho tri thức, ngữ vựng trong giao tiếpgiữanhững
 người làm phầnmềm.
 ƒ Giúp ta tìm hiểu ₫ể nắmvững hơn ₫ặc ₫iểm ngôn ngữ lậptrình
 hướng ₫ốitượng.
Như vậy, nếusử dụng triệt ₫ể các mẫuthiếtkế trong việcthiếtkế
phầnmềmmới, ta sẽ tiếtkiệm ₫ược chi phí, thời gian và nguồnlực. 
HơnnữaPM tạo ₫ượcsẽ có ₫ộ tin cậy, uyển chuyểncao, dễ dàng
hiệuchỉnh và nâng cấp sau này 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 8
13.1 Tổng quát về mẫuthiếtkế HĐT 
Phân loạicácmẫuthiếtkế : Dựa vào công dụng, ta có thể phân các
mẫuthiếtkế thành 3 nhóm chính : 
 ƒ Structural (nhóm mẫucấutrúc): các mẫu này cung cấpcơ chế
 ₫ể quảnlýcấutrúcvàmối quan hệ giữa các class, thí dụ₫ể
 dùng lại các class có sẵn (class thư viện, class của bên thứ ba
 - third party,), ₫ể tạomối ràng buộcthấpnhấtgiữa các class 
 (lower coupling) hay cung cấpcáccơ chế thừakế khác. 
 ƒ Creational (nhóm mẫuphụcvụ khởitạo ₫ốitượng) : giúp khắc
 phụccácvấn ₫ề về khởitạo ₫ốitượng, nhấtlà₫ốitượng lớnvà
 phứctạp, hạnchế sự phụ thuộccủaphầnmềm vào platform 
 cấpthấp.
 ƒ Behavioral (nhóm mẫugiải quyết hành vi của ₫ốitượng) : giúp
 che dấusự hiệnthựccủa ₫ốitượng, che dấugiảithuật, hỗ trợ
 việc thay ₫ổicấuhình₫ốitượng một cách linh.
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 9
13.1 Tổng quát về mẫuthiếtkế HĐT 
Phân loạicácmẫuthiếtkế : Còn nếudựavàoloạiphầntử ₫ược
dùng trong mẫu, ta có thể phân các mẫuthiếtkế thành 2 nhóm
chính : 
 ƒ Class patterns : nhóm mẫuthiếtkế chỉ sử dụng các class và
 mối quan hệ tĩnh giữa các class như thừakế, hiệnthực. Các
 mối quan hệ này ₫ượcxác₫ịnh tạithời ₫iểmdịch, do ₫ó class 
 patterns thích hợp cho thành phầnchứcnăng không cần thay
 ₫ổi ₫ộng trong thờigianchạy.
 ƒ Object patterns : nhóm mẫuthiếtkế có dùng mối quan hệ giữa
 các ₫ốitượng, mối quan hệ này rất ₫ộng vì dễ dàng thay ₫ổi
 bấtkỳ lúc nào trong lúc phầnmềmchạ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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 10
13.1 Tổng quát về mẫuthiếtkế HĐT 
‰ Trong phầncònlạicủachương này, chúng ta sẽ giớithiệu1 số
 mẫuthiếtkế có tầnsuấtsử dụng lại trong các ứng dụng cao nhất, 
 mỗimẫuthiếtkế ta sẽ miêu tả các thông tin như : 
 ƒ Tên gốctiếng Anh củamẫu
 ƒ Mụctiêucủamẫu
 ƒ Thí dụ về sử dụng mẫu
 ƒ Lược ₫ồ class miêu tả mẫu: chứa các phầntử (class, ₫ối
 tượng) trong mẫuvàmối quan hệ giữa chú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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 11
13.2 Mẫu Adapter 
Mụctiêu:
 ƒ Chuyển ₫ổi interface củamột class chứcnăng có sẵnthành
 một interface khác theo yêu cầusử dụng củaphầntử sử dụng
 class ₫ó(tagọiphầntử sử dụng là Client). 
 ƒ Thậtvậy, trong lậptrình₫ôi khi có những tình huống mà chúng
 ta cần dùng một class có sẵnnhưng thông qua 1 interface 
 khác chứ không muốn thông qua interface của chính class ₫ó. 
 Mẫu Adapter giúp chúng ta giảiquyếtvấn ₫ề 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 12
13.2 Mẫu Adapter 
Thí dụ về việcdùngmẫu Adapter :
ƒ Ta muốnviếtchương trình soạnthảo ₫ồ họa (DrawingEditor) cho
 phép user vẽ các ₫ốitượng ₫ồ họanhư Line, Rectangle, Ellipse, 
 Polygon, Text... Code quảnlýcác₫ốitượng ₫ồ họa(tagọilà
 Client) xử lý chúng thông qua interface thống nhấtlà
 IDrawingShape. Hiệnthực các class Line, Rectangle, Ellipse, 
 Polygon từ₫ầukhádễ vì chúng là những ₫ốitượng ₫ơngiản
 nhưng hiệnthực class Text thì phứctạphơn(giả sử class này có
 khả năng hiểnthị nội dung chuỗi trên nhiều dòng và có ₫ịnh dạng
 phong phú). Giả sử chúng ta ₫ang lập trình trên platform có cung
 cấpsẵn 1 class có tên là TextView, class này cung cấpchứcnăng
 quản lý Text giống như chương trình muốnnhưng interface sử
 dụng củanólàITextViewkhônggiống với interface IDrawingShap
 củachương trì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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 13
13.2 Mẫu Adapter 
Thí dụ về việcdùngmẫu Adapter :
ƒ Việc thay ₫ổi interface IDrawingShape củachương trình thành
 ITextView là không thể ₫ượcvìảnh hưởng ₫ến các class ₫ốitượng
 ₫ồ họa khác ₫ãviết. Việchiệuchỉnh lại class TextView ₫ể hỗ trợ
 interface IDrawingShape củachương trình cũng không khả thi vì
 TextView ₫ã ₫ượcsử dụng bởi nhiều ứng dụng khác, hệ thống
 không thể thay ₫ổitùytiện interface sử dụng củanó₫ược.
ƒ Cách tốtnhất ₫ể chương trình DrawingEditor của chúng ta có thể
 dùng ₫ược class TextView mà không cần thay ₫ổiTextViewcũng
 chẳng cần thay ₫ổi mã nguồncủa ứng dụng là dùng mẫu Adapter, 
 cụ thể₫ịnh nghĩa class TextShape như là phầntử₫ạidiệncho
 TextView, nó sẽ cung cấp ₫úng interface sử dụng mà chương trình
 cần. Chúng ta sẽ thấy chi phí ₫ịnh nghĩa class TextShape là rất
 thấpvà₫ộclậpvới ₫ộ phứctạpcủa class TextView.
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 14
13.2 Mẫu Adapter 
Lược ₫ồ class miêu tả mẫu Adapter thể hiệncáchthứcchương trình
DrawingEditor sử dụng class TextView 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 15
13.2 Mẫu Adapter 
Lược ₫ồ class miêu tả mẫu Adapter dạng class pattern :
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 16
13.2 Mẫu Adapter 
Lược ₫ồ class miêu tả mẫu Adapter dạng object pattern :
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 17
13.2 Mẫu Adapter 
Các phầntử tham gia :
ƒ IAdapter (IDrawingShape) : ₫ịnh nghĩa interface cho ₫oạn code 
 client sử dụng. 
ƒ IAdaptee (ITextView) : ₫ịnh nghĩa interface của ₫ốitượng có sẵn
 cần “chuyển” sang interface IAdapter. 
ƒ Client (DrawingEditor) : ₫oạn code củachương trình có sử dụng
 các ₫ốitượng thông qua interface IAdapter. 
ƒ Adaptee (TextView) : class chứcnăng ₫ãcósẵncần dùng trong
 ₫oạn code client. 
ƒ Adapter (TextShape) : class cần ₫ịnh nghĩavới chi phí rấtthấp, 
 nhiệmvụ chuyển interface IAdaptee sang interface IAdapter
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 18
13.2 Mẫu Adapter 
‰ Ta nói việc ₫ịnh nghĩa class Adaper rấtdễ dàng, vì từng tác vụ
 của class này ₫ượcviết theo template như sau : 
 Request() {
 //₫oạn code prolog (thường rấtngắnthậm chí không có)
 Adaptee.orig_request(); //gọitácvụ có chứcnăng tương tự
 của Adaptee
 //₫oạn code epilog (thường rấtngắnthậm chí không 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 19
13.2 Mẫu Adapter 
‰ Thí dụ trong class TextShape củachương trình DrawingEditor, tác
 vụ boundingBox() ₫ượcviếtnhư sau : 
 ISize boundingBox() {
 //không cần có code prolog
 //gọitácvụ cùng chứcnăng của ₫ốitượng gốc
 Rectangle rec = txtobj.getExtent();
 //code epilog sẽ chuyển ₫ổi ₫ịnh dạng kếtquả
 ISize size = new Size();
 size.w = rec.width;
 size.h = rec.height;
 return size;
 }
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 20
 13.3 Mẫu Composite 
Mụctiêu:
ƒ Tạo quan hệ bao gộpgiữacác₫ốitượng ₫ược dùng bởi module 
 client. Client sẽ dùng ₫ốitượng bao gộpvà₫ốitượng bị bao gộp
 thông qua cùng 1 interface thống nhất, nhờ₫ó ₫oạn code Client sẽ
 có tính tổng quát hóa cao, dễ phát triển, dễ bảo trì, không cầnhiệu
 chỉnh khi các ₫ốitượng ₫ượcsử dụng bị thay ₫ổi, thêm/bớt.
Thí dụ về việcdùngmẫu Composite :
ƒ Chương trình DrawingEditor vừacócác₫ốitượng ₫ơn(khôngchứa
 ₫ốitượng khác) như Line, Rectangle, Ellipse, vừacócác₫ốitượng
 tích hợpnhư Group chứanhiều ₫ốitượng khác. Nhưng ₫oạn code xử
 lý củachương trình muốn dùng các ₫ốitượng thông qua cùng 1 
 interface thống nhất ₫ể ₫ộclậpvớisố lượng và tính chấtcủacác₫ối
 tượng ₫ồ họa. Cách tốtnhất ₫ể giải quyếtvấn ₫ề này là dùng mẫu
 Composite 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 21
 13.3 Mẫu Composite 
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 22
13.3 Mẫu Composite 
Ta có thể xây dựng mẫu
Composite theo loại object 
pattern ₫ể miêu tả mối quan hệ
bao gộpgiữacác₫ốitượng. 
Lược ₫ồ class sẽ 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 23
13 ... heo dạng phân cấp. Mỗilần user mở lại 1 file tài liệu, về
 nguyên tắc, chương trình sẽ₫ọc toàn bộ nội dung của file ₫ể tạo
 lại ₫ầy ₫ủ các ₫ốitượng ₫ượcchứa trong file ₫ó, nốikếtchúng
 theo ₫úng cấutrúcgốccủa ₫ốitượng Document trướckhihiểnthị
 kếtquả lên màn hình ₫ể người dùng xử lý tiếp. Tuy nhiên việc ₫ọc
 nội dung các ₫ốitượng lớnvàphứctạpnhư hình bitmap, bảng dữ
 liệulớn vào bộ nhớ chương trình sẽ tốn nhiềuthờigian. Hơnnữa
 mỗilầnchương trình chỉ hiểnthị 1 phầnrấtnhỏ nội dung củatài
 liệu (1 trang màn hình) và chưachắc gì user muốnlàmviệctiếp
 vớiphầncònlạicủatàiliệ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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 29
13.4 MẫuProxy
ƒ Do ₫óchiếnlược ₫ọc toàn bộ tài liệutừ file vào bộ nhớ 1 lầnkhicó
 yêu cầucủauser làkhôngtốt, vừalàmtăng thờigian₫áp ứng với
 user, vừa phí phạm công sức trong trường hợp user chỉ xử lý 1 
 phầnrấtnhỏ củatàiliệu. Để khắcphụccácnhược ₫iểm trên, ta sẽ
 dùng mẫu Proxy. Cụ thể mỗilần user mở 1 file tài liệu, ta chỉ nạp
 trựctiếpcác₫ốitượng nhỏ củatàiliệuvàobộ nhớ, còn các ₫ối
 tượng lớnvàphứctạpnhư bitmap, bảng dữ liệu, ta sẽ chỉ tạo ₫ối
 tượng Proxy ₫ạidiện cho chúng, ₫ốitượng Proxy sẽ chứacác
 thông tin cơ bản, thiếtyếuvề₫ốitượng gốc. Nhờ₫ó, thờigiannạp
 tài liệu(lần ₫ầu) sẽ rất nhanh và ₫áp ứng kịpthời user. Theo theo
 thời gian, khi user lậttới trang nào, chương trình sẽ kiểmtratrang
 ₫ócóchứa ₫ốitượng Proxy không, nếucóthìsẽ nhờ Proxy nạp
 thật ₫ốitượng gốc trên file vào ₫ể user có thể làm việctrựctiếpvới
 ₫ốitượng gố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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 30
13.4 Mẫu Proxy 
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 31
13.4 Mẫu Proxy 
Ta có thể xây dựng mẫu Proxy theo loại object pattern ₫ể miêu tả mối
quan hệ giữa proxy và ₫ốitượng gốcmànóquản lý. 
Lược ₫ồ class sẽ 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 32
13.4 Mẫu Proxy 
Các phầntử tham gia :
ƒ ISubject (IDocItem) : interface thống nhấtcủacác₫ốitượng ₫ược
 sử dụng : ₫ốitượng gốcvà₫ốitượng proxy.
ƒ Client (DocumentEditor) : ₫oạn code củachương trình có sử dụng
 các ₫ốitượng thông qua interface thống nhất ISubject. 
ƒ RealSubject (Image) : class ₫ặctả₫ốitượng gốccần dùng bởi
 client, chi phí ₫ặctả nó phụ thuộc vào tính chấtvàchứcnăng của
 nó, nhưng thường là rấtlớn. Chi phí ₫ặctả này ₫ộclậpvớiviệc
 dùng mẫu Proxy.
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 33
13.4 Mẫu Proxy 
ƒ Proxy (ImageProxy) : class ₫ặctả₫ốitượng proxy, ₫ây là class 
 trọng tâm củamẫu. Nó sẽ thay thế₫ốitượng RealSubject trong
 khoảng thờigianchưacần ₫ốitượng RealSubject, nó giữ tham
 khảo ₫ến ₫ốitượng RealSubject ₫ể nhờ vả khi cần, nó kiểm soát
 quá trình truy xuất ₫ến ₫ốitượng RealSubject, có thể tạohoặc
 delete ₫ốitượng RealSubject. Tùy loại proxy mà ₫ốitượng Proxy 
 còn thựchiện1 số hoạt ₫ộng khác nữa.
Ta chỉ tốn chi phí rấtthấp ₫ể ₫ặctả class Proxy vì từng tác vụ của
 class này ₫ượcviết theo template như sau : 
 request() {
 //prolog code, thường rấtngắn, thậm chí là không có
 realSubject.request(); //nếucần, gọi ₫ốitượng gốcthựchiện
 //epilog code, thường rấtngắn, thậm chí là không 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 34
 13.4 Mẫu Proxy 
 Quá trình giao tiếp ở thời ₫iểm run-time có thể mô tả bằng lược ₫ồ
 ₫ốitượ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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 35
 13.5 Mẫu Decorator 
Mụctiêu:
 ƒ Thêm ₫ộng 1 số trách nhiệmmới cho 1 ₫ốitượng cụ thể mà
 không ảnh hưởng ₫ếncác₫ốitượng khác cùng chủng loại(cùng
 class). 
 ƒ Lưuý là₫ể thêm trách nhiệm cho toàn bộ các ₫ốitượng của1 
 class, ta có thể dùng tính thừakế hay thậm chí hiệuchỉnh trực
 tiếpmãnguồncủa class ₫ó
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 36
 13.5 Mẫu Decorator
Thí dụ về việcdùngmẫu Decorator :
ƒ Chương trình DrawingEditor cho phép tạovàhiểnthị nhiều ₫ốitượng
 ₫ồ họa, trong ₫ócó₫ốitượng TextView ₫ể hiểnthị nội dung vănbản. 
 Giả sử TextView là ₫ốitượng hình chữ nhậtvớikíchthướccố₫ịnh do 
 user qui ₫ịnh, nó chỉ hiểnthị nội dung vănbản trong hình chữ nhật do 
 nó quảnlýchứ không có ₫ường viền bao quanh.
ƒ Trong trường hợpuser tạo1 TextViewmới, có thể họ muốnTextView
 này có ₫ường viền bao quanh cho rõ ràng. Tương tự họ muốn
 TextView hiểnthị hình nền phía dướinội dung vănbản và trong
 trường hợpnội dung vănbảncủa TextView quá dài không thể₫ược
 hiểnthị hết trong hình chữ nhậtgiớihạncủa TextView thì user muốn
 hiểnthị thêm các scrollbar ngang và dọc ₫ể giúp user dờidễ dàng
 ₫ếnvị trí vănbảncầntập trung 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 37
 13.5 Mẫu Decorator 
 Cách tốtnhất ₫ể giải
 quyếtcácyêucầutrên
 là dùng mẫu Decorator 
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 38
13.5 Mẫu Decorator 
Ta có thể xây dựng mẫu Decorator theo loại object pattern ₫ể miêu tả
mối quan hệ giữa ₫ốitượng decore và ₫ốitượng gốc. Lược ₫ồ class sẽ
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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 39
13.5 Mẫu Decorator 
Các phầntử tham gia :
ƒ IComponent (IShape) : interface thống nhấtcủacác₫ốitượng ₫ược
 sử dụng : ₫ốitượng gốcvà₫ốitượng decore cho ₫ốitượng gốc.
ƒ Client (DrawingEditor) : ₫oạn code củachương trình có sử dụng các
 ₫ốitượng thông qua interface thống nhất IComponent. 
ƒ ConcreteComponent (TextView) : class ₫ặctả₫ốitượng gốccần
 dùng bởi client mà ta muốn decore cho nó, chi phí ₫ặctả nó phụ
 thuộc vào tính chấtvàchứcnăng của nó. Chi phí ₫ặctả này ₫ộclập
 vớiviệcdùngmẫu Decorator.
ƒ AbstractDecorator (TextViewDecorator) : class trừutượng, nhiệmvụ
 là ₫ặctả các thành phần dùng chung bởicác₫ốitượng con, thí dụ
 như tham khảo ₫ến ₫ốitượng cần decore, gởi thông ₫iệpgọitácvụ
 tương ứng của ₫ốitượng gố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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 40
13.5 Mẫu Decorator 
Các phầntử tham gia :
ƒ ConcreteDecorator1 (ScrollDecorator) : class ₫ặctả₫ốitượng
 decorator cụ thể, ₫ây là class trọng tâm củamẫu. Nó sẽ₫ại ₫iện
 ₫ốitượng gốc ₫ể giao tiếpvới Client, nó giữ tham khảo ₫ến ₫ối
 tượng gốc ₫ể yêu cầu công việctương ứng. Ta tốn chi phí khá
 thấp ₫ể ₫ặctả class này vì từng tác vụ của class này ₫ượcviết
 theo template như sau : 
 operation() {
 base.operation(); //gọi ₫ốitượng gốcthựchiệncôngviệctrước
 AddedBehavior(); //decore thêm theo 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 41
13.5 Mẫu Decorator 
Quá trình giao tiếp ở thời ₫iểm run-time có thể mô tả bằng lược ₫ồ
 ₫ốitượ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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 42
 13.6 Mẫu Facade 
Mụctiêu:
 ƒ cung cấp interface hợpnhấtchotập các interface của1 hệ thống
 con. Facade ₫ịnh nghĩa 1 interface cấpcaohơn các interface có
 sẵn ₫ể làm cho hệ thống con dễ sử dụng hơn.
 ƒ tốithiểu hóa tính "coupling" (nối ghép) giữacáchệ thống con. 
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 43
 13.6 Mẫu Facade
 Thí dụ về việcdùngmẫu Facade :
 ƒ hệ thống con phụcvụ biên dịch có nhiều class phụcvụ các bước
 biên dịch rờirạcnhư Scanner, Parser, ProgramNode, 
 BytecodeStream, ProgramNodeBuilder. Để dịch source code, ta có
 thể viết1 ứng dụng gọidịch vụ củatừng class ₫ể duyệt token, 
 parser, xây dựng cây cú pháp, tạo code ₫ốitượng... Tuy nhiên làm
 như trên sẽ rất khó và dễ gây ra lỗi. Cách khắcphụclà₫ịnh nghĩa1 
 class mớivớigiaotiếphợpnhất tên là Compiler, nó cung cấp 1 hàm
 Compile (file), ứng dụng nào cầndịch source code chỉ cầngởi
 thông ₫iệpCompile ₫ến ₫ốitượng Compiler. 
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 44
13.6 Mẫu Facade 
 Compiler
 Compile()
 Scanner Token
 Stream
 Parser Symbol
 BytecodeStream ProgramNodeBuffer ProgramNode
 CodeGenerator
 StatementNode
 ExpressionNode
 StackMachineCodeGenerator RISCCodeGenerator VariableNode
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 45
13.6 Mẫu Facade 
 Facade
 Subsystem class
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 46
13.6 Mẫu Facade 
Các phầntử tham gia :
ƒ Facade (Compiler)
 à biết class nào liên quan ₫ến request xác ₫ịnh. 
 à nhờ các ₫ốitượng liên quan thựchiện request.
ƒ subsystem classe (Scanner, Parser,..)
 à hiệnthựcmộtchứcnăng cụ thể củahệ thống con. 
 à xử lý công việc ₫ược ₫ốitượng Façade nhờ. 
 à không cầnbiết Facade, không có tham khảo ₫ến Facade. 
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 47
13.7 Mẫu Flyweight 
 Mụctiêu:
 ƒ dùng phương tiện dùng chung ₫ể quảnlýhiệuquả 1 số rấtlớn
 ₫ốitượng có nhiều thành phầngiống 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 48
13.7 Mẫu Flyweight
Thí dụ về việcdùngmẫu Flyweight :
ƒ Chương trình xử lý vănbản dùng khái niệm ₫ốitượng ₫ể miêu tả bất
 kỳ phầntử cơ bản nào : ký tự, công thức, hình, .... Ký tự là ₫ốitượng
 xuấthiệnrất nhiềulần trong vănbản, nếutamiêutả₫ốitượng ký tự
 chứatrựctiếptấtcả các thông tin về nó như mã ký tự, tên font, kích
 cỡ, màu, biếnthể (normal, bold, italic,), thì mỗi ₫ốitượng ký tự sẽ
 chiếm nhiều không gian, như vậyviệclưugiữ các ₫ốitượng ký tự sẽ
 rất không hiệuquả. Mẫu Flyweight rất thích hợp ₫ể giảiquyếtvấn
 ₫ề miêu tả₫ốitượng ký 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 49
13.7 Mẫu Flyweight
Thí dụ về việcdùngmẫu Flyweight :
ƒ Flyweight là ₫ốitượng dùng chung dựa vào khái niệmcơ bảnlàcác
 thuộctínhcủanócóthể ₫ược chia làm 2 loại: 
 à trạng thái trong : các thuộc tính ₫ộclậpvớingữ cảnh sử dụng, 
 thí dụ₫ốitượng ký tự có code ký tự là trạng thái trong.
 à trạng thái ngoài : các thuộc tính phụ thuộc và thay ₫ổitheongữ
 cảnh, thí dụ₫ốitượng ký tự có thuộc tính tên font, kích cỡ, màu, 
 biếnthể, là trạng thái ngoài. Ta không nên chứatrạng thái
 ngoài trựctiếp trong ₫ốitượng mà nên gom chúng trong 1 ₫ối
 tượng khác, flyweight chỉ chứathamkhảo ₫ến ₫ốitượng chứa
 trạng thái ngoài.
ƒ Đốitượng chứatrạng thái ngoài thường ₫ược dùng chung bởinhiều
 flyweight 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 50
13.7 Mẫu Flyweight 
‰ Miêu tả các ₫ốitượng ký tự 1 cách bình thường
 Code (N) Code (g) Code (u) Code (y) Code (ễ) Code (n)
 Các thông số Các thông số Các thông số Các thông số Các thông số Các thông số
 hiểnthị hiểnthị hiểnthị hiểnthị hiểnthị hiểnthị
 ‰ Miêu tả các ₫ốitượng ký tự dùng mẫu Flyweight giúp dùng chung
 các thông số hiểnthị bởirất nhiềukýtự có cùng cách thứchiển
 thị.
 Code (N) Code (N) Code (N) Code (N) Code (N) Code (N)
 Các thông số
 hiểnthị
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 51
13.7 Mẫu Flyweight 
‰ Miêu tả các ₫ốitượng ký tự trong MS Word (dùng mẫu Flyweight 
 và array)
 i i+1 i+2 i+3 i+4 i+5
  Code (N) Code (N) Code (N) Code (N) Code (N) Code (N) 
 Các thông số
 i, i+5 hiểnthị
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 52
13.7 Mẫu Flyweight 
 FlyweightFactory Flyweight
 GetFlyweight(key) Operation(extrinsicState)
 if (flyweight(key) exists 
 return existing flyweight
 else {
 create new flyweight;
 add it to pool of flyweights;
 return the new flyweight;
 }
 ConcreteFlyweight UnsharedConcreteFlyweight
 Operation(extrinsicState) Operation(extrinsicState)
 intrinsicState allState
 Client
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 53
13.7 Mẫu Facade 
Các phầntử tham gia :
ƒ Flyweight (Glyph) : ₫ịnh nghĩa interface cho ₫ốitượng nhậnyêucầu
 và hoạt ₫ộng theo trạng thái ngoài. 
ƒ ConcreteFlyweight (Character) : hiệnthực interface Flyweight thành
 các ₫ốitượng dùng chung. 
ƒ UnsharedConcreteFlyweight (Character) : hiệnthực interface 
 Flyweight thành các ₫ốitượng không dùng chung. 
ƒ FlyweightFactory : tạovàquảnlýcác₫ốitượng Flyweight. 
ƒ Client : chứa tham khảo ₫ến flyweight và nhờ khi 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 54
13.8 Kếtchương
‰ Chương này ₫ãgiớithiệu các thông tin cơ bảnvề mẫuthiếtkế
 hướng ₫ốitượng và miêu tả mục tiêu, tính chấtcủacácmẫuthiết
 kế phụcvụ cấutrúccác₫ốitượng như Adapter, Composite, 
 Proxy, Decorator, Facade, Flyweight. 
 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 13 : Các mẫuthiếtkế phụcvụ tổ chứccấutrúccác₫ốitượng
 © 2010 Slide 55

File đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_chuong_13_cac_mau_thiet.pdf