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.
Trang 1GV
GV NguyễnNguyễn Minh Minh HuyHuy
Mẫu
1 Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh HuyCuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 2Mẫu Strategy Strategy
Ngữ Ngữ cảnh cảnh::
Bài Bài toán toán::
SắpSắp xếpxếp mảngmảng
ThanhThanh toántoán hóahóa đơnđơn
VẽVẽ mộtmột loạiloại hìnhhình
Mục Mục tiêu tiêu::
Mục Mục tiêu tiêu::
CóCó nhiềunhiều thuậtthuật toántoán xửxử lýlý chocho mộtmột phươngphương thứcthức
Có thểCó thể lựalựa chọnchọn thuậtthuật toántoán khikhi chươngchương trìnhtrình thựcthực hiệnhiện
Có thểCó thể thaythay đổiđổi thuậtthuật toántoán lựalựa chọnchọn nhiềunhiều lầnlần
Trang 3Mẫu Strategy Strategy
Hướng Hướng tiếp tiếp cận cận::
Nhiều Nhiều thuật thuật toán toán xử xử lý lý khác khác nhau nhau::
TạoTạo lớplớp thuậtthuật toántoán tổngtổng quátquát
TạoTạo lớplớp kếkế thừathừa chocho mỗimỗi thuậtthuật toántoán cụcụ thểthể
Lựa Lựa chọn chọn thuật thuật toán toán xử xử lý lý cho cho phương phương thức thức::
Trang Trang bịbị đốiđối tượngtượng thuậtthuật toántoán chocho lớplớp chứachứa phươngphương thứcthức
TrangTrang bịbị đốiđối tượngtượng thuậtthuật toántoán chocho lớplớp chứachứa phươngphương thứcthức
KhiKhi gọigọi phươngphương thứcthức, , nhờnhờ đốiđối tượngtượng thuậtthuật toántoán thựcthực hiệnhiện
Thay Thay đổi đổi thuật thuật toán toán lựa lựa chọn chọn nhiều nhiều lần lần::
Cho Cho phépphép cậpcập nhậtnhật đốiđối tượngtượng thuậtthuật toántoán đãđã trangtrang bịbị
3 Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh HuyCuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 4Mẫu Strategy Strategy
Hướng Hướng tiếp tiếp cận cận::
Trang 5Mẫu Strategy Strategy
Cài Cài đặt đặt::
class
class Receipt Receipt
{{
private:
Payment*
Payment* m_pay m_pay;;
public:
double calculate();
class
class Payment Payment
{{
public:
virtual double
virtual double calculate() calculate() = 0;= 0;
};
class
class CashPayment CashPayment: public Payment: public Payment };
double Receipt::calculate()
{{
return
return m_pay m_pay >calculate() >calculate();;
}}
5 Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
class
class CashPayment CashPayment: public Payment: public Payment {{
public:
double
double calculate() calculate();;
};
class
class CreditCardPayment CreditCardPayment: public Payment: public Payment {{
public:
double
double calculate() calculate();;
};
Trang 6Mẫu Strategy Strategy
Các Các vấn vấn đề đề xung xung quanh quanh::
Cập Cập nhật nhật đối đối tượng tượng thuật thuật toán toán bằng bằng cách cách nào nào? ?
KhởiKhởi tạotạo thôngthông qua constructor.qua constructor
ChỉChỉ lựalựa chọnchọn 1 1 lầnlần, , khôngkhông thểthể thaythay đổiđổi lầnlần sausau
TạoTạo phươngphương thứcthức truytruy xuấtxuất (get/set).(get/set)
PhảiPhải lưulưu đốiđối tượngtượng thuậtthuật toántoán
PhảiPhải lưulưu đốiđối tượngtượng thuậtthuật toántoán
CậpCập nhậtnhật thôngthông qua qua thamtham sốsố phươngphương thứcthức
class
class Receipt Receipt
{{
private:
Payment*
Payment* m_pay m_pay;;
public:
setPay setPay(Payment* pay); (Payment* pay);
double calculate();
};
class
class Receipt Receipt
{{
private:
Payment*
Payment* m_pay m_pay;;
public:
Receipt(Payment* pay);
double calculate();
};
class
class Receipt Receipt
{{
public:
double calculate(
double calculate(Payment* pay Payment* pay);); };
Trang 7Mẫu Strategy Strategy
Các Các vấn vấn đề đề xung xung quanh quanh::
Phân Phân biệt biệt Strategy Strategy và và Template Method: Template Method:
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 đổi một vài bước trong thuật toán xử lý phương thức.
- Giữ nguyên khung sườn.
7 Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
- “Thay da đổi thịt” - Giữ nguyên khung sườn.
Cài đặt - Tách biệt cây thuật toán.
- Sử dụng composition đối tượng thuật toán.
- Sử dụng inheritance trên chính lớp chứa phương thức.
Trang 8Mẫu Strategy Strategy
Các Các vấn vấn đề đề xung xung quanh quanh::
Phân Phân biệt biệt Strategy Strategy và và kế kế thừa thừa trực trực tiếp tiếp::
GiốngGiống nhaunhau: : đềuđều cócó thểthể thaythay đổiđổi xửxử lýlý củacủa phươngphương thứcthứ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)
- Quan hệ IS-A (giữa Context và Algorithm) (giữa Context và Algorithm) (giữa Context và Algorithm) Cài đặt - Tách biệt cây 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 nào 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).
Trang 9Mẫu Strategy Strategy
Các Các vấn vấn đề đề xung xung quanh quanh::
Hạn Hạn chế chế::
TáchTách biệtbiệt câycây thuậtthuật toántoán
KhôngKhông thểthể truytruy xuấtxuất thànhthành phầnphần private private lớplớp Context.Context
class
class Receipt Receipt
{{
class
class CashPayment CashPayment: public Payment: public Payment {{
{{
private:
Payment*
Payment* m_pay m_pay;;
double
double m_tax m_tax;;
public:
double calculate();
};
double Receipt::calculate()
{{
return
return m_pay m_pay >calculate() >calculate();;
}}
9 Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy
{{
public:
double
double calculate() calculate();;
};
double double CashPayment CashPayment::calculate() ::calculate() {{
//
// Làm Làm sao sao truy truy xuất xuất m_tax m_tax?? ??
}}
Trang 10Mẫu Strategy Strategy
Các Các vấn vấn đề đề xung xung quanh quanh::
Hạn Hạn chế chế::
Cho Cho phépphép thaythay đổiđổi thuậtthuật toántoán xửxử lýlý
TạoTạo nhiềunhiều đốiđối tượngtượng thuậtthuật toántoán
TốnTốn tàitài nguyênnguyên hệhệ thốngthống
ÁpÁp dụngdụng Singleton!!Singleton!!
ÁpÁp dụngdụng Singleton!!Singleton!!