Strategy MẫuMẫu Strategy MẫuMẫu Strategy Strategy
GV. GV. Nguyễn
Nguyễn Minh Minh HuyHuy
Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
1
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Strategy MẫuMẫu Strategy
cảnh:: (cid:1)(cid:1) NgữNgữ cảnh (cid:1)(cid:1) BàiBài toántoán::
(cid:2)(cid:2) SắpSắp xếpxếp mảngmảng.. Thanh toán (cid:2)(cid:2) Thanh (cid:2)(cid:2) VẽVẽ mộtmột loại
toán hóahóa đơnđơn.. loại hìnhhình..
(cid:1)(cid:1) MụcMục tiêutiêu:: (cid:1)(cid:1) MụcMục tiêutiêu::
thuật toán
toán xửxử lýlý chocho mộtmột phương
nhiều thuật
thức.. phương thức trình thực
thực hiệnhiện..
(cid:2)(cid:2) CóCó nhiều (cid:2)(cid:2) CóCó thểthể lựalựa chọn (cid:2)(cid:2) CóCó thểthể thay
chọn thuật thay đổiđổi thuật
thuật toán thuật toán
toán khikhi chương toán lựalựa chọn
chương trình chọn nhiều
nhiều lầnlần..
Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
2
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Strategy MẫuMẫu Strategy
(cid:1)(cid:1) Hướng
Hướng tiếptiếp cậncận:: (cid:1)(cid:1) NhiềuNhiều thuật
khác nhaunhau:: thuật toántoán xửxử lýlý khác quát.. tổng quát
thuật toán
toán tổng
(cid:2)(cid:2) TạoTạo lớplớp thuật (cid:2)(cid:2) TạoTạo lớplớp kếkế thừa
thuật toán
thừa chocho mỗimỗi thuật
toán cụcụ thểthể.. thuật toántoán xửxử lýlý chocho phương toán chocho lớplớp chứa toán chocho lớplớp chứa thuật toán thuật toán
tượng thuật tượng thuật
(cid:1)(cid:1) LựaLựa chọnchọn thuật (cid:2)(cid:2) Trang Trang bịbị đốiđối tượng Trang Trang bịbị đốiđối tượng (cid:2)(cid:2) KhiKhi gọigọi phương
thức, , nhờnhờ đốiđối tượng
thức:: phương thức phương thức chứa phương thức.. phương thức chứa phương thức.. thực hiệnhiện.. toán thực
thuật toán
(cid:1)(cid:1) ThayThay đổiđổi thuật (cid:2)(cid:2) Cho Cho phép
phương thức thuật toántoán lựalựa chọnchọn nhiều nhật đốiđối tượng
tượng thuật nhiều lầnlần:: thuật toán
tượng thuật
phép cậpcập nhật
toán đãđã trang
trang bịbị..
Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
3
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Strategy MẫuMẫu Strategy
(cid:1)(cid:1) Hướng
Hướng tiếptiếp cậncận::
Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
4
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Strategy MẫuMẫu Strategy
class Payment class Payment {{ public: public:
(cid:1)(cid:1) CàiCài đặtđặt:: class Receipt class Receipt {{ private: private:
virtual double calculate() virtual double calculate() = 0;= 0; Payment* m_paym_pay;; Payment*
};}; public: public:
double calculate(); double calculate();
: public Payment CashPayment: public Payment CashPayment: public Payment : public Payment };};
class class CashPayment class class CashPayment {{ public: public:
calculate();; double calculate() double double Receipt::calculate() double Receipt::calculate() {{ };}; >calculate();; return m_paym_pay-->calculate() return
}} : public Payment CreditCardPayment: public Payment
class class CreditCardPayment {{ public: public:
calculate();; double calculate() double
Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
5
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
};};
Strategy MẫuMẫu Strategy
(cid:1)(cid:1) CácCác vấnvấn đềđề xung
thuật toántoán bằngbằng cáchcách nàonào??
(cid:1)(cid:1) CậpCập nhậtnhật đốiđối tượng (cid:2)(cid:2) KhởiKhởi tạotạo thông (cid:3)(cid:3) ChỉChỉ lựalựa chọn
thay đổiđổi lầnlần sausau..
(cid:2)(cid:2) TạoTạo phương
quanh:: xung quanh tượng thuật thông qua constructor. qua constructor. không thểthể thay chọn 1 1 lầnlần, , không (get/set). xuất (get/set). thức truytruy xuất toán.. tượng thuật toán.. thuật toán thuật toán tượng thuật thức.. phương thức qua thamtham sốsố phương
phương thức (cid:3)(cid:3) PhảiPhải lưulưu đốiđối tượng (cid:3)(cid:3) PhảiPhải lưulưu đốiđối tượng nhật thông
thông qua
(cid:2)(cid:2) CậpCập nhật
class Receipt class Receipt {{ public: public:
class Receipt class Receipt {{ private: private:
class Receipt class Receipt {{ private: private:
double calculate(Payment* pay double calculate(
Payment* pay););
m_pay;; Payment* m_pay Payment*
m_pay;; Payment* m_pay Payment*
};};
public: public:
public: public:
Receipt(Payment* pay); Receipt(Payment* pay); double calculate(); double calculate();
setPay (Payment* pay); setPay(Payment* pay); double calculate(); double calculate();
};};
};};
Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
6
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Strategy MẫuMẫu Strategy
(cid:1)(cid:1) CácCác vấnvấn đềđề xung
quanh:: xung quanh Template Method: Strategy vàvà Template Method:
(cid:1)(cid:1) PhânPhân biệtbiệt Strategy
Tiêu chí Strategy Template Method
Ý tưởng
- Thay đổi toàn bộ thuật toán xử lý phương thức. - “Thay da đổi thịt”. - “Thay da đổi thịt”. - Thay đổi một vài bước trong thuật toán xử lý phương thức. - Giữ nguyên khung sườn. - Giữ nguyên khung sườn.
Cài đặt
- Sử dụng inheritance trên chính 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
7
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
- Tách biệt cây thuật toán. - Sử dụng composition đối tượng thuật toán.
Strategy MẫuMẫu Strategy
(cid:1)(cid:1) CácCác vấnvấn đềđề xung
quanh:: xung quanh Strategy vàvà kếkế thừa
(cid:1)(cid:1) PhânPhân biệtbiệt Strategy
thừa trựctrực tiếptiếp::
(cid:2)(cid:2) GiốngGiống nhau
nhau: : đềuđều cócó thểthể thay
thay đổiđổi xửxử lýlý củacủa phương
thức.. phương thức
Tiêu chí Strategy Kế thừa trực tiếp
Tính chất
- Quan hệ HAS-A (giữa Context và Algorithm) (giữa Context và Algorithm) - Quan hệ IS-A (giữa Context và Algorithm) (giữa Context và Algorithm)
Cài đặt - Tách biệt cây thuật toán.
Linh động
- Override lại phương thức. (cid:4) “Bùng nổ” lớp kế thừa. - 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
8
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
- Lựa chọn thuật toán động (khi nào cần). - Thay đổi lựa chọn nhiều lần.
Strategy MẫuMẫu Strategy
quanh:: xung quanh
(cid:1)(cid:1) CácCác vấnvấn đềđề xung (cid:1)(cid:1) HạnHạn chếchế::
(cid:2)(cid:2) TáchTách biệtbiệt câycây thuật
toán.. thuật toán
(cid:3)(cid:3) Không
Không thểthể truytruy xuất
xuất thành
thành phần
phần private
Context. private lớplớp Context.
: public Payment CashPayment: public Payment
class Receipt class Receipt {{ {{ private: private: class class CashPayment {{ {{ public: public:
calculate();; double calculate() double
m_pay;; Payment* m_pay Payment* double m_taxm_tax;; double };};
public: public:
double calculate(); double calculate(); ::calculate() CashPayment::calculate()
double double CashPayment {{
// // LàmLàm saosao truytruy xuất xuất m_taxm_tax????
};}; double Receipt::calculate() double Receipt::calculate() {{ }}
>calculate();; return m_paym_pay-->calculate() return
Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
9
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
}}
Strategy MẫuMẫu Strategy
quanh:: xung quanh
(cid:1)(cid:1) CácCác vấnvấn đềđề xung (cid:1)(cid:1) HạnHạn chếchế::
(cid:2)(cid:2) Cho Cho phép
phép thay
toán xửxử lýlý.. toán.. thuật toán
thuật toán tượng thuật thống.. nguyên hệhệ thống
thay đổiđổi thuật nhiều đốiđối tượng tài nguyên Singleton!! dụng Singleton!! dụng Singleton!! Singleton!!
(cid:3)(cid:3) TạoTạo nhiều (cid:3)(cid:3) TốnTốn tài (cid:3)(cid:3) ÁpÁp dụng (cid:3)(cid:3) ÁpÁp dụng
Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
10
CuuDuongThanCong.com
https://fb.com/tailieudientucntt