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