M u Strategy GV Nguy n Minh Huy M u thi t k hư ng đ i tư ng & ng d ng CuuDuongThanCong.com Nguy n Minh Huy 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 V1 m2t lo4i hình hình M c tiêu tiêu:: Có nhi8u thu9t tốn x: lý cho m2t phương th cc Có th< l=a ch>n thu9t tốn chương trình th=c hi?n hi?n Có th< thay đ@i thu9t tốn l=a ch>n nhi8u lAn lAn M u thi t k hư ng đ i tư ng & ng d ng CuuDuongThanCong.com Nguy n Minh Huy https://fb.com/tailieudientucntt M u Strategy Hư ng ti p c9n c9n:: Nhi8u thu9t toán x: lý khác nhau:: T4o l p thu9t toán t@ng quát quát T4o l p k thDa cho mEi thu9t toán c th< th< L=a ch>n thu9t toán x: lý cho phương th cc:: Trang bH đ i tư ng thu9t toán cho l p ch a phương th c c Khi g>i phương th cc,, nhK đ i tư ng thu9t toán th=c hi?n hi?n Thay đ@i thu9t toán l=a ch>n nhi8u lAn: lAn: Cho phép c9p nh9t đ i tư ng thu9t toán trang bH bH M u thi t k hư ng đ i tư ng & ng d ng CuuDuongThanCong.com Nguy n Minh Huy https://fb.com/tailieudientucntt M u Strategy Hư ng ti p c9n c9n:: M u thi t k hư ng đ i tư ng & ng d ng CuuDuongThanCong.com Nguy n Minh Huy https://fb.com/tailieudientucntt M u Strategy Cài đPt đPt:: class Payment { public: virtual double calculate() = 0; }; class Receipt { private: Payment* m_pay m_pay;; public: double calculate(); }; double Receipt::calculate() { return m_pay >calculate() >calculate();; } M u thi t k hư ng đ i tư ng & ng d ng CuuDuongThanCong.com class CashPayment CashPayment:: public Payment { public: double calculate() calculate();; }; class CreditCardPayment CreditCardPayment:: public Payment { public: double calculate() calculate();; }; Nguy n Minh Huy https://fb.com/tailieudientucntt M u Strategy Các v^n đ8 xung quanh quanh:: C9p nh9t đ i tư ng thu9t toán b_ng cách nào? ? Khai t4o thông qua constructor Chc l=a ch>n lAn, lAn, không th< thay đ@i lAn sau sau T4o phương th c truy xu^t (get/set) Ph$i lưu đ i tư ng thu9t tốn tốn C9p nh9t thơng qua tham s phương th cc 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 CuuDuongThanCong.com Nguy n Minh Huy class Receipt { public: double calculate(Payment* calculate(Payment* pay); pay); }; https://fb.com/tailieudientucntt M u Strategy Các v^n đ8 xung quanh quanh:: Phân bi?t Strategy Template Method: Tiêu chí Strategy Template Method Ý tưang Thay đ@i toàn b2 thu9t toán x: lý phương th c “Thay da đ@i thHt” Thay đ@i m2t vài bư c thu9t toán x: lý phương th c Gi" nguyên khung sưKn Cài đPt Tách bi?t thu9t toán S: d ng composition đ i tư ng thu9t 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 CuuDuongThanCong.com Nguy n Minh Huy https://fb.com/tailieudientucntt M u Strategy Các v^n đ8 xung quanh quanh:: Phân bi?t Strategy k thDa tr=c ti p p:: Gi ng nhau:: đ8u có th< thay đ@i x: lý cma phương th cc 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) Tách bi?t thu9t toán Override l4i phương th c “Bùng n@” l p k thDa Cài đPt Linh đ2ng L=a ch>n thu9t toán đ2ng (khi cAn) Thay đ@i l=a ch>n nhi8u lAn M u thi t k hư ng đ i tư ng & ng d ng CuuDuongThanCong.com Nguy n Minh Huy L=a ch>n thu9t toán c ng (khi t4o l p Context) https://fb.com/tailieudientucntt M u Strategy Các v^n đ8 xung quanh quanh:: H4n ch : Tách bi?t thu9t tốn tốn Khơng th< truy xu^t thành phAn 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 >calculate() >calculate();; } M u thi t k hư ng đ i tư ng & ng d ng CuuDuongThanCong.com Nguy n Minh Huy 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 đ8 xung quanh quanh:: H4n ch : Cho phép thay đ@i thu9t toán x: lý lý T4o nhi8u đ i tư ng thu9t toán toán T n tài nguyên h? th ng ng Áp d ng Singleton!! M u thi t k hư ng đ i tư ng & ng d ng CuuDuongThanCong.com Nguy n Minh Huy https://fb.com/tailieudientucntt 10