Design Patterns: Decorator

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Thuộc nhóm: Structural

Tần suất sử dụng: Cao trung bình

Định nghĩa

Gắn một vài 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.

Ứ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.

Sơ đồ UML

Decorator: Sơ đồ UML

Component (LibraryItem)

  • Định nghĩa giao diện cho đối tượng mà có thể có nhiệm vụ thêm nó vào một cách động

ConcreteComponent (Book, Video)

  • Định nghĩa một đối tượng để có thể gắn nhiệm vụ thêm thành phần cho nó

Decorator (Decorator)

  • Duy trì một tham chiếu tới một đối tượng thành phần và định nghĩa một giao diện mà phù hợp với giao diện của thành phần.

ConcreteDecorator (Borrowable)

  • Thêm nhiệm vụ cho thành phần

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.

» Tiếp: Facade
« Trước: Composite
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!