Bài giảng Mẫu thiết kế hướng đối tượng và ứng dụng: Mẫu template method cung cấp cho người học các kiến thức: Ngữ cảnh mẫu template method, hướng tiếp cận mẫu template method, cài đặt, các vấn đề xung quanh. Mời các bạn cùng tham khảo nội dung chi tiết.
Trang 1GV
GV NguyễnNguyễn Minh Minh HuyHuy
Mẫu
Trang 2Bài Bài toán toán::
XâyXây dựngdựng thuậtthuật toántoán khungkhung
ThiếtThiết lậplập event event trongtrong lậplập trìnhtrình
CàiCài đặtđặt hook hook sựsự kiệnkiện
Mục Mục tiêu tiêu::
Mục Mục tiêu tiêu::
MộtMột quyquy trìnhtrình khungkhung cốcố địnhđịnh
Có thểCó thể cảicải tiếntiến, , mởmở rộngrộng cáccác bướcbước trongtrong quyquy trìnhtrình
CảiCải biênbiên mộtmột phầnphần phươngphương thứcthức
Trang 3Cài Cài đặt đặt quy quy trình trình khung khung::
DùngDùng phươngphương thứcthức khôngkhông ảoảo (non(non virtual).virtual)
Cải Cải tiến tiến, , mở mở rộng rộng các các bước bước trong trong quy quy trình trình::
TáchTách cáccác bướcbước cầncần sửasửa thànhthành phươngphương thứcthức độcđộc lậplập
Phương Phương thứcthức khungkhung gọigọi cáccác phươngphương thứcthức nàynày
PhươngPhương thứcthức khungkhung gọigọi cáccác phươngphương thứcthức nàynày
CácCác lớplớp kếkế thừathừa cảicải biênbiên lạilại
Trang 4class
class Form Form
{{
public:
void load() {{
onBeforeLoad onBeforeLoad(); ();
class
class WelcomeForm WelcomeForm
{{
public:
void void onBeforeLoad onBeforeLoad() () {{
// Load // Load ảnh ảnh giới giới thiệu thiệuS S }}
//
// Cài Cài đặt đặt load formS load formS onAfterLoad
onAfterLoad(); ();
}}
virtual
virtual void void onBeforeLoad onBeforeLoad() { } () { } virtual void
virtual void onAfterLoad onAfterLoad() { }; () { };
};
}}
}}
class
class LoginForm LoginForm
{{
public:
void
void onAfterLoad onAfterLoad() () {{
// Focus ô // Focus ô nhập nhập usernameS usernameS }}
}}
Trang 5Áp Áp đặt đặt quy quy trình trình khung khung với với người người dùng dùng::
ChỉChỉ cócó thểthể cảicải biênbiên cáccác bướcbước con.con
TuânTuân thủthủ quyquy trìnhtrình thựcthực hiệnhiện cáccác bướcbước
Dùng Dùng protectedS protectedS
class
class Form Form {{ void void main() main()
class
class Form Form {{
public:
void void load() { load() {
onBeforeLoad
onBeforeLoad(); ();
//
// Cài Cài đặt đặt load formS load formS onAfterLoad
onAfterLoad(); ();
}}
protected:
virtual
virtual void void onBeforeLoad onBeforeLoad() { } () { } virtual void
virtual void onAfterLoad onAfterLoad() { }; () { };
void
void main() main()
{{
Form f = new Form f = new WelcomeForm WelcomeForm(); ();
f.onAfterLoad f.onAfterLoad(); (); // // Lỗi Lỗi f.onBeforeLoad
f.onBeforeLoad(); (); // // Lỗi Lỗi
f.load f.load(); ();
}}
Trang 6Áp Áp dụng dụng giảm giảm trùng trùng lặp lặp mã mã nguồn nguồn::
PhươngPhương thứcthức cảicải biênbiên ở ở cáccác lớplớp kếkế thừathừa cócó phầnphần chungchung
class
class Animal Animal
{{
public:
virtual void talk() = 0;
class
class Cat Cat {{
public:
void talk()
void talk() {{
prepareSound prepareSound(); ();
virtual void talk() = 0;
};
prepareSound prepareSound(); ();
//
// Cài Cài đặt đặt kêu kêu meo meo meo meoS S }}
};
class
class Dog Dog {{
public:
void talk()
void talk() {{
prepareSound prepareSound(); ();
//
// Cài Cài đặt đặt kêu kêu gâu gâu gâu gâuS S }}
};
Trang 7Áp Áp dụng dụng giảm giảm trùng trùng lặp lặp mã mã nguồn nguồn::
TáchTách phầnphần chungchung thànhthành Template Method.Template Method
ChuyểnChuyển phầnphần riêngriêng thànhthành Primitive Operation.Primitive Operation
class
class Animal Animal
{{
class
class Cat Cat {{
protected:
{{
public:
void talk() {{
prepareSound prepareSound(); ();
doTalk doTalk(); ();
}}
protected:
virtual
virtual doTalk doTalk() = 0; () = 0;
};
void void doTalk doTalk() () {{
//
// Cài Cài đặt đặt kêu kêu meo meo meo meoS S }}
};
class
class Dog Dog {{
protected:
void
void doTalk doTalk() () {{
//
// Cài Cài đặt đặt kêu kêu gâu gâu gâu gâuS S }}
};
Trang 8Áp Áp dụng dụng tránh tránh quên quên gọi gọi phương phương thức thức cha: cha:
PhươngPhương thứcthức cha cha cungcung cấpcấp càicài đặtđặt mặcmặc địnhđịnh
PhươngPhương thứcthức con con cảicải biênbiên vàvà gọigọi lạilại cha.cha
class
class Button Button {{
public:
class
class Button Button {{
public:
public:
virtual void
virtual void onDraw onDraw() { () {
//
// Cài Cài đặt đặt mặc mặc định địnhS S
}}
};
class
class CustomButton CustomButton {{
public:
void void onDraw onDraw() () {{
//
// Cài Cài đặt đặt vẽ vẽS S
Button::
Button::onDraw onDraw(); ();
}}
};
virtual void virtual void onDraw onDraw() { () {
hookOperator
hookOperator(); ();
//
// Cài Cài đặt đặt mặc mặc định địnhS S
}}
};
class
class CustomButton CustomButton {{
protected:
void void hookOperation hookOperation() () {{
//
// Cài Cài đặt đặt vẽ vẽS S }}
};