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.
Mẫu Template Method GV Nguyễn Minh Huy Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com https://fb.com/tailieudientucntt Mẫu Template Method Ngữ cảnh cảnh:: Bài toán toán:: Xây dựng thuật toán khung khung Thiết lập event lập trình trình Cài đặt hook kiện kiện Mục tiêu tiêu:: Một quy trình khung cố định định Có thể cải tiến tiến,, mở rộng bước quy trình trình Cải biên phần phương thức thức Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com https://fb.com/tailieudientucntt Mẫu Template Method Hướng tiếp cận cận:: Cài đặt quy trình khung: khung: Dùng phương thức không ảo (non (non virtual) Cải tiến tiến,, mở rộng bước quy trình trình:: Tách bước cần sửa thành phương thức độc lập lập Phương thức khung gọi phương thức này Các lớp kế thừa cải biên lại lại Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com https://fb.com/tailieudientucntt Mẫu Template Method Cài đặt đặt:: class Form { public: void load() { onBeforeLoad(); onBeforeLoad (); // Cài đặt load form onAfterLoad(); onAfterLoad (); } virtual void onBeforeLoad onBeforeLoad() () { } virtual void onAfterLoad onAfterLoad() () { }; }; Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com class WelcomeForm { public: void onBeforeLoad onBeforeLoad() () { // Load ảnh giới thiệu } } class LoginForm { public: void onAfterLoad onAfterLoad() () { // Focus ô nhập username } } https://fb.com/tailieudientucntt Mẫu Template Method Các vấn đề xung quanh quanh:: Áp đặt quy trình khung với người dùng dùng:: Chỉ cải biên bước Tuân thủ quy trình thực bước bước Dùng protected class Form { public: void load() { onBeforeLoad(); onBeforeLoad (); // Cài đặt load form onAfterLoad(); onAfterLoad (); } protected: virtual void onBeforeLoad onBeforeLoad() () { } virtual void onAfterLoad onAfterLoad() () { }; }; Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com void main() { Form f = new WelcomeForm(); WelcomeForm(); f.onAfterLoad(); f.onAfterLoad(); f.onBeforeLoad(); f.onBeforeLoad (); // Lỗi // Lỗi f.load(); f.load (); } https://fb.com/tailieudientucntt Mẫu Template Method Các vấn đề xung quanh quanh:: Áp dụng giảm trùng lặp mã nguồn nguồn:: Phương thức cải biên lớp kế thừa có phần chung chung class Animal { public: virtual void talk() = 0; }; Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com class Cat { public: void talk() { prepareSound(); prepareSound (); // Cài đặt kêu meo meo } }; class Dog { public: void talk() { prepareSound(); prepareSound (); // Cài đặt kêu gâu gâu } }; https://fb.com/tailieudientucntt Mẫu Template Method Các vấn đề xung quanh quanh:: Áp dụng giảm trùng lặp mã nguồn nguồn:: Tách phần chung thành Template Method Chuyển phần riêng thành Primitive Operation class Animal { public: void talk() { prepareSound(); prepareSound (); doTalk(); doTalk (); } protected: virtual doTalk doTalk() () = 0; }; Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com class Cat { protected: void doTalk doTalk() () { // Cài đặt kêu meo meo } }; class Dog { protected: void doTalk doTalk() () { // Cài đặt kêu gâu gâu } }; https://fb.com/tailieudientucntt Mẫu Template Method Các vấn đề xung quanh 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 định Phương thức cải biên gọi lại cha class Button { public: virtual void onDraw() onDraw() { // Cài đặt mặc định } }; class CustomButton { public: void onDraw() onDraw() { // Cài đặt vẽ Button::onDraw Button:: onDraw(); (); } }; Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com class Button { public: virtual void onDraw() onDraw() { hookOperator(); hookOperator (); // Cài đặt mặc định } }; class CustomButton { protected: void hookOperation hookOperation() () { // Cài đặt vẽ } }; https://fb.com/tailieudientucntt ... Cải biên phần phương thức thức Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com https://fb.com/tailieudientucntt Mẫu Template Method Hướng tiếp cận cận:: Cài đặt quy... phương thức này Các lớp kế thừa cải biên lại lại Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com https://fb.com/tailieudientucntt Mẫu Template Method Cài đặt đặt::... onBeforeLoad() () { } virtual void onAfterLoad onAfterLoad() () { }; }; Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com class WelcomeForm { public: void onBeforeLoad