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

};}; };};