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.. Tên chức năng giftRender sẽ vấn được giữ nguyên, tuy nhiên, tín
Trang 1University of Technical Education HCMC
Faculty of Information Technology
o0o OBJECT-ORIENTED ANALYSIS AND DESIGN
Decorator
Trang 28 Ưu nhược điểm
9 Các mẫu liên quan
10 Demo
Trang 31 Đặ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
Trang 42 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
Trang 74 Mục đích sử dụng
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.
Trang 85 Cấu trúc Decorator
5.1 Cấu trúc, các lớp/đối tượng tham gia:
Trang 95 Cấu trúc Decorator
5.2 Ý nghĩa và vai trò của từng lớp:
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.
Trang 1005/04/2024 10
Trang 11Giao diện IPizza là thành
Trang 1205/04/2024 12
Trang 1405/04/2024 14
Trang 1605/04/2024 16
Trang 186 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.
Trang 208 Ư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
Trang 219 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
Trang 2210 Ví dụ
Trang 23CẢM ƠN THẦY VÀ CÁC BẠN ĐÃ LẮNG NGHE!!!