Bài giảng Mẫu thiết kế hướng đối tượng và ứng dụng: Mẫu Strategy cung cấp cho người học các kiến thức: Ngữ cảnh mẫu Strategy, hướng tiếp cận mẫu Strategy, 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 Strategy 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 Strategy Ngữ cảnh cảnh:: Bài toán toán:: Sắp xếp mảng mảng Thanh tốn hóa đơn đơn Vẽ loại hình hình Mục tiêu tiêu:: Có nhiều thuật tốn xử lý cho phương thức thức Có thể lựa chọn thuật tốn chương trình thực hiện Có thể thay đổi thuật tốn lựa chọn nhiều lần lần 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 Strategy Hướng tiếp cận cận:: Nhiều thuật toán xử lý khác nhau:: Tạo lớp thuật toán tổng quát quát Tạo lớp kế thừa cho thuật toán cụ thể thể Lựa chọn thuật toán xử lý cho phương thức thức:: Trang bị đối tượng thuật toán cho lớp chứa phương thức thức Khi gọi phương thức thức,, nhờ đối tượng thuật toán thực hiện Thay đổi thuật toán lựa chọn nhiều lần: lần: Cho phép cập nhật đối tượng thuật toán trang bị bị 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 Strategy Hướng tiếp cận cận:: 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 Strategy Cài đặt đặt:: class Receipt { private: Payment* m_pay m_pay;; public: double calculate(); }; double Receipt::calculate() { return m_pay m_pay >calculate() >calculate();; } class Payment { public: virtual double calculate() = 0; }; class CashPayment CashPayment:: public Payment { public: double calculate() calculate();; }; class CreditCardPayment CreditCardPayment:: public Payment { public: double calculate() calculate();; }; 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 Strategy Các vấn đề xung quanh quanh:: Cập nhật đối tượng thuật toán cách nào? ? Khởi tạo thông qua constructor Chỉ lựa chọn lần, lần, thay đổi lần sau sau Tạo phương thức truy xuất (get/set) Phải lưu đối tượng thuật tốn tốn Cập nhật thơng qua tham số phương thức thức class Receipt { private: Payment* m_pay m_pay;; public: Receipt(Payment* pay); double calculate(); }; class Receipt { private: Payment* m_pay m_pay;; public: setPay(Payment* setPay (Payment* pay); double calculate(); }; Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com class Receipt { public: double calculate(Payment* calculate(Payment* pay); pay); }; https://fb.com/tailieudientucntt Mẫu Strategy Các vấn đề xung quanh quanh:: Phân biệt Strategy Template Method: Tiêu chí Strategy Template Method Ý tưởng - Thay đổi tồn thuật tốn xử lý phương thức - “Thay da đổi thịt” - Thay đổi vài bước thuật toán xử lý phương thức - Giữ nguyên khung sườn Cài đặt - Tách biệt thuật toán - Sử dụng composition đối tượng thuật toán - Sử dụng inheritance lớp chứa phương 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 Strategy Các vấn đề xung quanh quanh:: Phân biệt Strategy kế thừa trực tiếp tiếp:: Giống nhau:: thay đổi xử lý phương thức thức Tiêu chí Strategy Kế thừa trực tiếp Tính chất - Quan hệ HAS-A (giữa Context Algorithm) - Quan hệ IS-A (giữa Context Algorithm) Cài đặt - Tách biệt thuật toán - Override lại phương thức “Bùng nổ” lớp kế thừa Linh động - Lựa chọn thuật toán động (khi cần) - Thay đổi lựa chọn nhiều lần - Lựa chọn thuật toán cứng (khi tạo lớp Context) 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 Strategy Các vấn đề xung quanh quanh:: Hạn chế chế:: Tách biệt thuật toán tốn Khơng thể truy xuất thành phần private lớp Context class Receipt { private: Payment* m_pay m_pay;; double m_tax m_tax;; public: double calculate(); }; double Receipt::calculate() { return m_pay m_pay >calculate() >calculate();; } Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com class CashPayment CashPayment:: public Payment { public: double calculate() calculate();; }; double CashPayment CashPayment::calculate() ::calculate() { // Làm truy xuất m_tax m_tax?? ?? } https://fb.com/tailieudientucntt Mẫu Strategy Các vấn đề xung quanh quanh:: Hạn chế chế:: Cho phép thay đổi thuật toán xử lý lý Tạo nhiều đối tượng thuật toán toán Tốn tài nguyên hệ thống thống Áp dụng Singleton!! Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com https://fb.com/tailieudientucntt 10 ... nhật đối tượng thuật toán trang bị bị 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 Strategy Hướng tiếp cận cận:: Mẫu thiết kế. .. calculate();; }; 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 Strategy Các vấn đề xung quanh quanh:: Cập nhật đối tượng thuật... Linh động - Lựa chọn thuật toán động (khi cần) - Thay đổi lựa chọn nhiều lần - Lựa chọn thuật toán cứng (khi tạo lớp Context) Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com