Bài giảng Mẫu thiết kế hướng đối tượng và ứng dụng - Chương 5: Mẫu Template Method - Nguyễn Minh Huy

Mẫu Template Method Các vấn đề xung quanh: Áp đặt quy trình khung với người dùng: Chỉ cócó thểthể cải biên các bước con. Tuân thủ quy trình thực hiện các bước. Dùng protectedS class Form {void main() public: void load() { onBeforeLoad();(); // // Cài đặt load formS onAfterLoad();(); } protected: virtual void onBeforeLoad() { } virtual void onAfterLoad() { }; };}; { Form f = new WelcomeForm();(); f.onAfterLoad();(); // // Lỗi f.onBeforeLoad();(); // // Lỗi f.load();(); }

pdf8 trang | Chia sẻ: thanhle95 | Lượt xem: 356 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Bài giảng Mẫu thiết kế hướng đối tượng và ứng dụng - Chương 5: Mẫu Template Method - Nguyễn Minh Huy, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Mẫu Template Method GV. Nguyễn Minh Huy 1Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh HuyCuuDuongThanCong.com https://fb.com/tailieudientucntt Mẫu Template Method  Ngữ cảnh:  Bài toán:  Xây dựng thuật toán khung.  Thiết lập event trong lập trình.  Cài đặt hook sự kiện. Mục tiêu:  Một quy trình khung cố định.  Có thể cải tiến, mở rộng các bước trong quy trình.  Cải biên một phần phương thức. 2Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh HuyCuuDuongThanCong.com https://fb.com/tailieudientucntt Mẫu Template Method  Hướng tiếp cận:  Cài đặt quy trình khung:  Dùng phương thức không ảo (non-virtual).  Cải tiến, mở rộng các bước trong quy trình:  Tách các bước cần sửa thành phương thức độc lập. Phương thức khung gọi các phương thức này.  Các lớp kế thừa cải biên lại. 3Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh HuyCuuDuongThanCong.com https://fb.com/tailieudientucntt Mẫu Template Method  Cài đặt: class Form { public: void load() { onBeforeLoad(); class WelcomeForm { public: void onBeforeLoad() { // Load ảnh giới thiệuS }// Cài đặt load formS onAfterLoad(); } virtual void onBeforeLoad() { } virtual void onAfterLoad() { }; }; 4Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy } class LoginForm { public: void onAfterLoad() { // Focus ô nhập usernameS } } CuuDuongThanCong.com https://fb.com/tailieudientucntt Mẫu Template Method  Các vấn đề xung quanh:  Áp đặt quy trình khung với người dùng:  Chỉ có thể cải biên các bước con.  Tuân thủ quy trình thực hiện các bước.  Dùng protectedS class Form { void main() public: void load() { onBeforeLoad(); // Cài đặt load formS onAfterLoad(); } protected: virtual void onBeforeLoad() { } virtual void onAfterLoad() { }; }; 5Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy { Form f = new WelcomeForm(); f.onAfterLoad(); // Lỗi f.onBeforeLoad(); // Lỗi f.load(); } CuuDuongThanCong.com https://fb.com/tailieudientucntt Mẫu Template Method  Các vấn đề xung quanh:  Áp dụng giảm trùng lặp mã nguồn:  Phương thức cải biên ở các lớp kế thừa có phần chung. class Animal { public: virtual void talk() = 0; class Cat { public: void talk() { prepareSound(); }; 6Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy // Cài đặt kêu meo meoS } }; class Dog { public: void talk() { prepareSound(); // Cài đặt kêu gâu gâuS } }; CuuDuongThanCong.com https://fb.com/tailieudientucntt Mẫu Template Method  Các vấn đề xung quanh:  Áp dụng giảm trùng lặp mã nguồn:  Tách phần chung thành Template Method.  Chuyển phần riêng thành Primitive Operation. class Animal { class Cat { protected: public: void talk() { prepareSound(); doTalk(); } protected: virtual doTalk() = 0; }; 7Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy void doTalk() { // Cài đặt kêu meo meoS } }; class Dog { protected: void doTalk() { // Cài đặt kêu gâu gâuS } }; CuuDuongThanCong.com https://fb.com/tailieudientucntt Mẫu Template Method  Các vấn đề xung quanh:  Áp dụng tránh quên gọi phương thức cha:  Phương thức cha cung cấp cài đặt mặc định.  Phương thức con cải biên và gọi lại cha. class Button { public: class Button { public: virtual void onDraw() { // Cài đặt mặc địnhS } }; class CustomButton { public: void onDraw() { // Cài đặt vẽS Button::onDraw(); } }; 8Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy virtual void onDraw() { hookOperator(); // Cài đặt mặc địnhS } }; class CustomButton { protected: void hookOperation() { // Cài đặt vẽS } }; CuuDuongThanCong.com https://fb.com/tailieudientucntt
Tài liệu liên quan