
Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 14 : Các mẫuthiếtkếphụcvụkhởitạo₫ốitượng
Slide 1
14.1 Tổng quát vềnhóm mẫu “Creational”
14.2 Mẫu Abstract Factory
14.3 Mẫu Factory Method
14.4 Mẫu Prototype
14.5 Mẫu Builder
14.6 Mẫu Singleton
14.7 Kếtchương
Chương 14
Các mẫuthiếtkếphụcvụkhởitạo₫ốitượng
(Creational Patterns)
Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 14 : Các mẫuthiếtkếphụcvụkhởitạo₫ốitượng
Slide 2
14.1 Tổng quát vềnhóm mẫu “Creational”
Đốitượng thường chứa nhiềuthuộctínhdữliệuvànhiều tham
khảo₫ếncác₫ốitượng khác. Đoạn code khởitạogiátrịcho các
thuộc tính và tham khảo này phụthuộc hoàn toàn vào sựhiện
thựccụthểcủa₫ốitượng. Chúng ta cầntách₫oạn code này khỏi
code củaclient sửdụng ₫ốitượng.
Thường client muốntạo₫ốitượng phứchợp mà không cầnquan
tâm ₫ến các thông tin cụthểchi tiếtsau:
Đốitượng phứchợpthuộc class cụthểnào.
Nó chứacácloại₫ốitượng con nào, sốlượng ra sao.
Mối quan hệgiữacác₫ốitượng con nhưthếnào.

Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 14 : Các mẫuthiếtkếphụcvụkhởitạo₫ốitượng
Slide 3
14.1 Tổng quát vềnhóm mẫu “Creational”
Các mẫuthiếtkế“Creational” sẽgiúp code client linh ₫ộng vềmặt
khởitạo, quảnlývàsửdụng ₫ốitượng. Chúngcóthểcho phép
client chủ₫ộng trong việcxác₫ịnh ₫ốitượng nào ₫ượctạo ra, ai
tạora₫ốitượng ₫ó, cách thứcvàthời₫iểmkhởitạo₫ốitượng ₫ó.
Đặc₫iểmnổibậtcủacácmẫuthiếtkế“creational” là ₫oạn code
client cầnsửdụng ₫ốitượng không trựctiếpsinhra₫ốitượng mà
nhờcác phầntửtrung gian ₫ể tăng ₫ộ linh ₫ộng, tốithiểu hóa sự
phụthuộc vào các class ₫ốitượng cụthể.
Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 14 : Các mẫuthiếtkếphụcvụkhởitạo₫ốitượng
Slide 4
14.2 Mẫu Abstract Factory
Mụctiêu:
Cung cấp cho Client 1 interface gồmtậptácvụkhởitạocác
₫ốitượng ₫ược dùng trong Client nhưng che dấumọi chi tiếtvề
₫ốitượng ₫ượctạora, thídụnhưthuộc class cụthểnào…
Một trong các mụctiêucủaviệcviết code ứng dụng là phảicó
tính tổng quát cao và ₫ộ ₫ộclậpcaovới chi tiếthiệnthựccủa
các ₫ốitượng mà nó dùng. Một trong các phương án ₫ể ₫ạt
₫ượcmụctiêutrênlàkhôngdùnglệnh new ₫ể tạora₫ốitượng
cần dùng vì nếu dùng lệnh new thì phảixác₫ịnh tên class cụ
thểvà nhưvậysẽphụthuộc vào class này. Mẫu
AbstractFactory sẽgiúp chúng ta tạo₫ốitượng mà không cần
biết tên class cụthể ₫ược dùng.

Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 14 : Các mẫuthiếtkếphụcvụkhởitạo₫ốitượng
Slide 5
14.2 Mẫu Abstract Factory
Thí dụvềviệcdùngmẫu Abstract factory :
Ta muốnviếtchương trình GUI (dùng giao diện₫ồ họatrực quan)
có khảnăng chạy trên nhiều platform khác nhau (chương trình
multi-platform). Mỗi platform có mộthọcác class miêu tảcác ₫ối
tượng giao diệnphổdụng nhưTextBox, Button,… Giảsửcác ₫ối
tượng giao diệncùngchứcnăng trên các platform khác nhau hỗ
trợcùng interface thống nhất(nếu không ta dùng mẫu Adapter ₫ể
có ₫ượckếtquảnày). Việcsửdụng cụthểhọcác class giao diện
nào chỉbiếtkhichương trình bắt₫ầuchạy. Để giải quyếtvấn₫ề
trên, cách tốtnhất là dùng mẫu AbstractFactory vớilược₫ồ class
nhưsau :
Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 14 : Các mẫuthiếtkếphụcvụkhởitạo₫ốitượng
Slide 6
14.2 Mẫu Abstract Factory

Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 14 : Các mẫuthiếtkếphụcvụkhởitạo₫ốitượng
Slide 7
14.2 Mẫu Abstract Factory
Ta có thểxây
dựng mẫu
AbstractFactory
theo loại class
pattern vớilược
₫ồ class nhưsau
:
Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 14 : Các mẫuthiếtkếphụcvụkhởitạo₫ốitượng
Slide 8
14.2 Mẫu Abstract Factory
Các phầntửtham gia :
IObjectA, IObjectB : interface thống nhấtcủacác₫ốitượng cùng
chứcnăng trong các họkhác nhau.
IAbstractFactory : interface của₫ốitượng chuyên tạocác₫ối
tượng dùm cho Client.
ConcreteFactory1… : class hiệnthựccáctácvụtạo₫ốitượng
trong interface IAbstractFactory. Hệthống có nhiều
ConcreteFactory, mỗi ConcreteFactory sinh ra các ₫ốitượng cùng
họ, các họ₫ốitượng do các ConcreteFactory tạoratương ₫ồng
nhau vềvai trò, vềchứcnăng.

Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 14 : Các mẫuthiếtkếphụcvụkhởitạo₫ốitượng
Slide 9
14.2 Mẫu Abstract Factory
Các phầntửtham gia (tt) :
ObjectA, ObjectB : class hiệnthực₫ốitượng ₫ượctạorabởi class
ConcreteFactory tương ứng, nó hỗtrợinterface sửdụng tương
ứng.
Client : ₫oạn code cầntạovàsửdụng các ₫ốitượng. Client chỉsử
dụng các interface IAbstractFactory, IObjectA, IObjectB,… và như
thếhoàn toàn ₫ộclậpvới các class cụthểmà nó sẽdùng.
Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 14 : Các mẫuthiếtkếphụcvụkhởitạo₫ốitượng
Slide 10
14.2 Mẫu Abstract Factory
Quá trình tương tác giữa các phầntử:
Tạithời₫iểmdịch, Client có biến tham khảo₫ến₫ốitượng
IAbstractFactory (giảsửtênlàfactory).
Tạithời₫iểm run-time, dựa vào ngữcảnh, Client sẽbiếtcầnsử
dụng họ₫ốitượng nào và nó sẽtạo₫ốitượng ConcreteFactory
tương ứng rồi gán tham khảo vào biếnfactory. Sau₫ó trong giải
thuật, mỗilầntạo₫ốitượng cần dùng, thông qua biếnfactory,
Client sẽgởi thông ₫iệp₫ể yêu cầu ConcreteFactory tạora₫ối
tượng mong muốn.
Client dựa vào interface của₫ốitượng ₫ượctạora₫ể sửdụng ₫ối
tượng này.