Template Method MẫuMẫu Template Method MẫuMẫu Template Method Template Method
GV. GV. Nguyễn
Nguyễn Minh Minh HuyHuy
Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
1
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Template Method MẫuMẫu Template Method
cảnh:: (cid:1)(cid:1) NgữNgữ cảnh (cid:1)(cid:1) BàiBài toántoán::
dựng thuật Thiết lậplập event
toán khung khung.. trình.. trong lậplập trình
(cid:2)(cid:2) XâyXây dựng (cid:2)(cid:2) Thiết (cid:2)(cid:2) CàiCài đặtđặt hook
thuật toán event trong hook sựsự kiệnkiện..
(cid:1)(cid:1) MụcMục tiêutiêu:: (cid:1)(cid:1) MụcMục tiêutiêu::
khung cốcố địnhđịnh..
trình khung
trình.. trong quyquy trình
(cid:2)(cid:2) MộtMột quyquy trình (cid:2)(cid:2) CóCó thểthể cảicải tiếntiến, , mởmở rộng (cid:3)(cid:3) CảiCải biênbiên mộtmột phần
bước trong rộng cáccác bước thức.. phương thức
phần phương
Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
2
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Template Method MẫuMẫu Template Method
(cid:1)(cid:1) Hướng
Hướng tiếptiếp cậncận:: (cid:1)(cid:1) CàiCài đặtđặt quyquy trình (cid:2)(cid:2) DùngDùng phương
khung:: trình khung thức không
không ảoảo (non
bước trong
(non--virtual). virtual). trình:: trong quyquy trình thức độcđộc lậplập.. phương thức
thành phương
phương thức (cid:1)(cid:1) CảiCải tiếntiến, , mởmở rộngrộng cáccác bước bước cầncần sửasửa thành thức khung thức khung
khung gọigọi cáccác phương khung gọigọi cáccác phương
phương thức phương thức
thức nàynày.. thức nàynày..
(cid:2)(cid:2) TáchTách cáccác bước Phương thức Phương thức Phương (cid:2)(cid:2) Phương (cid:2)(cid:2) CácCác lớplớp kếkế thừa
lại.. thừa cảicải biênbiên lại
Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
3
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Template Method MẫuMẫu Template Method
(cid:1)(cid:1) CàiCài đặtđặt:: class class FormForm {{ public: public:
class WelcomeForm class WelcomeForm {{ public: public:
onBeforeLoad()()
void onBeforeLoad void {{ void load() void load() {{
// Load ảnhảnh giớigiới thiệu // Load thiệuSS
}} }}
onBeforeLoad();(); onBeforeLoad // // CàiCài đặtđặt load formS load formS onAfterLoad();(); onAfterLoad
void onBeforeLoad
}} class LoginForm class LoginForm {{ public: public: }} virtual void virtual virtual void onAfterLoad virtual void () { } onBeforeLoad() { } () { }; onAfterLoad() { };
onAfterLoad()() };};
void onAfterLoad void {{
// Focus ô nhập // Focus ô usernameS nhập usernameS
}}
Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
4
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
}}
Template Method MẫuMẫu Template Method
(cid:1)(cid:1) CácCác vấnvấn đềđề xung (cid:1)(cid:1) ÁpÁp đặtđặt quyquy trình
quanh:: xung quanh khung vớivới người trình khung
trình thực
người dùngdùng:: con. bước con. bước.. thực hiệnhiện cáccác bước
(cid:2)(cid:2) ChỉChỉ cócó thểthể cảicải biênbiên cáccác bước (cid:2)(cid:2) TuânTuân thủthủ quyquy trình (cid:3)(cid:3) DùngDùng protectedS protectedS
void main() void main() void main() void main() {{ class Form {{ class Form class Form class Form {{ public: public:
Form f = new WelcomeForm Form f = new WelcomeForm();();
f.onAfterLoad f.onAfterLoad();(); f.onBeforeLoad();(); f.onBeforeLoad // // LỗiLỗi // // LỗiLỗi load() { void load() { void onBeforeLoad();(); onBeforeLoad // // CàiCài đặtđặt load formS load formS onAfterLoad();(); onAfterLoad
f.load();(); f.load }} protected: protected:
}} void onBeforeLoad
virtual virtual void virtual void onAfterLoad virtual void onBeforeLoad() { } () { } () { }; onAfterLoad() { };
Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
5
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
};};
Template Method MẫuMẫu Template Method
(cid:1)(cid:1) CácCác vấnvấn đềđề xung
quanh:: xung quanh
(cid:1)(cid:1) ÁpÁp dụngdụng giảmgiảm trùng Phương thức
nguồn:: trùng lặplặp mãmã nguồn thức cảicải biênbiên ở ở cáccác lớplớp kếkế thừa
(cid:2)(cid:2) Phương
thừa cócó phần
chung.. phần chung
class Cat Cat {{ class public: public:
void talk() {{ void talk() Animal class Animal class {{ public: public:
virtual void talk() = 0; virtual void talk() = 0; virtual void talk() = 0; virtual void talk() = 0;
prepareSound prepareSound();(); prepareSound prepareSound();(); // // CàiCài đặtđặt kêukêu meomeo meomeoSS };};
}}
};}; class class Dog Dog {{ public: public:
void talk() {{ void talk()
prepareSound();(); prepareSound // // CàiCài đặtđặt kêukêu gâugâu gâugâuSS
}}
Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
6
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
};};
Template Method MẫuMẫu Template Method
(cid:1)(cid:1) CácCác vấnvấn đềđề xung
quanh:: xung quanh
(cid:1)(cid:1) ÁpÁp dụngdụng giảmgiảm trùng
phần chung
chung thành
(cid:2)(cid:2) TáchTách phần (cid:2)(cid:2) Chuyển
Chuyển phần
phần riêng
nguồn:: trùng lặplặp mãmã nguồn Template Method. thành Template Method. Primitive Operation. thành Primitive Operation.
riêng thành
class class Cat Cat {{ protected: protected: void doTalk void doTalk()() {{ class Animal class Animal {{ {{ public: public:
// // CàiCài đặtđặt kêukêu meomeo meomeoSS
}} void talk() void talk() {{
prepareSound();(); prepareSound doTalk();(); doTalk
}} protected: protected: };}; class class Dog Dog {{ protected: protected: void doTalk void doTalk()() {{
virtual doTalk virtual () = 0; doTalk() = 0; // // CàiCài đặtđặt kêukêu gâugâu gâugâuSS
};}; }}
Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
7
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
};};
Template Method MẫuMẫu Template Method
(cid:1)(cid:1) CácCác vấnvấn đềđề xung
quanh:: xung quanh tránh quênquên gọigọi phương
cha: thức cha:
phương thức cung cấpcấp càicài đặtđặt mặcmặc địnhđịnh..
(cid:1)(cid:1) ÁpÁp dụngdụng tránh Phương thức (cid:2)(cid:2) Phương Phương thức (cid:2)(cid:2) Phương
thức cha thức con
cha cung con cảicải biênbiên vàvà gọigọi lại
cha. lại cha.
class Button {{ class Button public: public: class Button {{ class Button public: public: public: public:
onDraw() {() { virtual void onDraw virtual void onDraw() {() {
// // CàiCài đặtđặt mặcmặc địnhđịnhSS
virtual void onDraw virtual void hookOperator();(); hookOperator // // CàiCài đặtđặt mặcmặc địnhđịnhSS }}
}}
CustomButton {{
CustomButton {{ };}; class class CustomButton public: public:
void onDraw void
};}; class CustomButton class protected: protected: hookOperation() () {{ void hookOperation void // // CàiCài đặtđặt vẽvẽSS onDraw() () {{ // // CàiCài đặtđặt vẽvẽSS Button::onDraw Button:: onDraw();();
}} }}
Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
8
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
};}; };};