Tải bản đầy đủ (.pptx) (23 trang)

OBJECT ORIENTED ANALYSIS AND DESIGN decorator

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (507.27 KB, 23 trang )

University of Technical Education HCMC
Faculty of Information Technology
----o0o----

OBJECT-ORIENTED
ANALYSIS AND DESIGN

Decorator
Lecturer: Nguyễn Trần Thi Văn

2/25/19

1


Nội dung
1. Đặt vấn đề
2. Giai pháp
3. Tổng quan về Decorator
4. Mục đích sử dụng
5. Cấu trúc Decorator
6. Tính chất đặc thù
7. Lĩnh vực áp dụng và các hệ quả
8. Ưu nhược điểm
2/25/19

2


1. Đặt vấn đề:
 Chúng ta ít nhiều cũng đã từng tặng quà cho bạn bè và người thân. Một món quà khi được bày bán thông thường ở dạng thô như con gấu


bông, chiếc xe đồ chơi, cây viết...Sau khi mua một món gì đó xong, chúng ta có thể gói quà trong một chiếc hộp. Sau đó có thể bọc giấy gói quà
bên ngoài cho đẹp. Như vậy, một món quà cuối cùng được hình thành theo trình tư như sau: Món quà thô → đóng hộp → gói quà.

 Theo trình tự này, sản phẩm mà chúng ta nhận được sẽ gồm 3 phần: món quà, chiếc hộp và giấy gói. Tất cả kết hợp lại để tạo ra một món quà
đẹp hơn, hấp dẫn hơn, hay nói theo một cách khác, chúng ta đã "decor" món quà trông bắt mắt hơn.

Làm thế nào để thể hiện vấn đề trên trong lập trình?

2/25/19

3


2. Giải pháp:
Chúng ta có thể sử dụng decorator pattern để giải quyết vấn đề trên.
Giả sử hành vi của món quà (Gift) là giftRender, khi đó ta sẽ có một interface Giftable thực hiện chức năng là giftRender. Chúng ta cũng sẽ có 1
class có tên là Gift implement Giftable để thực hiện chức năng giftRender. Tên chức năng giftRender sẽ vấn được giữ nguyên, tuy nhiên, tính chất
của món quà sẽ được thay đổi, món quà sẽ được bỏ vào hộp và được bọc lại. Khi đó, sản phẩm cuối cùng vẫn có chức năng giftRender và nội
dung thực thi trong chức năng đã thay đổi so với lúc nó còn là thể hiện của class Gift. Decorator pattern không làm thay đổi tên hành vi nhưng nó
sẽ làm thay đổi kết quả của hành vi. Chúng ta có thể xem xét mô hình để hiểu rõ hơn về cấu trúc của Decorator pattern.

2/25/19

4


2/25/19

5



3. Tổng quan về Decorator




Decorator Pattern là loại design pattern thuộc mô hình cấu trúc (structural pattern).
Decorator pattern là một cách mở rộng phương thức một cách linh động.
Các thể hiện của cùng một lớp sẽ không ảnh hưởng bởi việc mở rộng đó.

2/25/19

6


4. Mục đích sử dụng



2/25/19

Gắn các chức năng bổ sung cho các đối tượng (gán động).
Decorator cung cấp một số thay đổi mềm dẻo cho các phân lớp để mở rộng thêm các chức năng.

7


5. Cấu trúc Decorator
5.1. Cấu trúc, các lớp/đối tượng tham gia:


2/25/19

8


5. Cấu trúc Decorator
5.2. Ý nghĩa và vai trò của từng lớp:





2/25/19

Component: giao diện (interface) chung để các đối tượng cần thêm chức năng trong quá trình chạy thì triển khai giao diện này.
ConcreteComponent : Một cài đặt cho giao diện Component mà nó định nghĩa một đối tượng cần thêm các chức năng trong quá trình chạy.
Decorator : một lớp trừu tượng dùng để duy trì một tham chiếu của đối tượng thành phần và đồng thời cài đặt các thành phần của giao diện.
ConcreteDecorator : Một cài đặt của Decorator, nó cài đặt thêm các thành phần vào đầu của các đối tượng thành phần.

9


2/25/19

10


Giao diện IPizza là thành phần Component trong mẫu thiết kế Decorator,
nó chứa phương thức doPizza, đây là phương thức dùng để tạo ra một pizza
phù hợp.


2/25/19

11


2/25/19

12


2/25/19

13


2/25/19

14


2/25/19

15


2/25/19

16



2/25/19

17


6. Tính chất đặc thù
Chỉ gắn thêm chức năng mà không làm thay đổi cấu trúc đối tượng.
Chỉ sửa đổi nhiệm vụ chứ không làm thay đổi giao diện.

2/25/19

18


7. Lĩnh vực áp dụng và các hệ quả
Ứng dụng:
Sử dụng Decorator khi:



Thêm các chức năng bổ sung cho các đối tượng riêng biệt một cách động và trong suốt, nghĩa là không chịu ảnh hưởng (tác động ) của các đối
tượng khác.




Cho các chức năng mà các chức năng này có thể được rút lại (hủy bỏ) (nếu không cần nữa).

Khi sự mở rộng được thực hiện bởi các phân lớp là không thể thực hiện được. Đôi khi một lượng lớn các mở rộng độc lập có thể thực hiện được

nhưng lại tạo ra một sự bùng nổ các phân lớp để trợ giúp cho các kết hợp. Hoặc một định nghĩa lớp có thể bị che đi hay nói cách khác nó không có
giá trị cho việc phân lớp.

2/25/19

19


8. Ưu Nhược điểm
Ưu điểm:

o Giảm thời gian viết code.
o Cung cấp một giải pháp linh hoạt hơn khi thêm chức năng của đối tượng so với cách kế thừa truyền thống.
Nhược điểm:

o Việc bảo trì có thể là vấn đề vì nó cung cấp rất nhiều loại Object của class chức năng

2/25/19

20


9. Các mẫu liên quan
Mẫu Decorator khác với Adapter, Decorator chỉ thay đổi nhiệm vụ của đối tượng, không phải là thay đổi giao diện của nó như Adapter. Adapter sẽ
mang đến cho đối tượng một giao diện mới hoàn toàn.
Decorator cũng có thể coi như một Composite bị thoái hoá với duy nhất một thành phần. Tuy nhiên, một Decorator thêm phần nhiệm phụ, nó là phần
đối tượng được kết tập vào.Một Decorator cho phép chúng ta thay đổi bề ngoài của một đối tượng, một strategy cho phép chúng ta thay đổi ruột của
đối tượng.

Chúng là 2 cách luân phiên nhau để ta thay đổi một đối tượng.


2/25/19

21


10. Ví dụ

2/25/19

22


CẢM ƠN
THẦY VÀ CÁC BẠN ĐÃ LẮNG NGHE!!!

2/25/19

23



×