Decorator

Khái niệm:

Gán bổ sung các “trách nhiệm” (responsibility) cho một đối tượng một cách linh hoạt. Các decorator cung cấp một sự lựa chọn linh động cho lớp con để mở rộng tính năng.

Mức độ sử dụng: vừa

UML Class Diagramdecorator_class_diagram

Những lớp và/hoặc đối tượng trong mẫu thiết kế này:

Component (LibraryItem): định nghĩa interface cho các đối tượng mà các “trách nhiệm” được thêm vào chúng một cách linh hoạt.

ConcreteComponent (Book, Video): xác định một đối tượng mà các “trách nhiệm” bổ sung có thể được gán vào.

Decorator (Decorator): bảo trì một tham chiếu đến một đối tượng Component và định nghĩa một interface phù hợp với interface của Component.

ConcreteDecorator (Borrowable): thêm các “trách nhiệm” vào component.

Decorator: khi nào sử dụng và sử dụng ở đâu

Động cơ của mẫu thiết kế Decorator là cho bạn mở rộng một hành vi của đối tượng một cách linh hoạt. Khả năng này là để gán hành vi mới một cách linh hoạt cho các đối tượng được thực hiện bới một lớp Decorator.

Mẫu thiết kế Decorator kết hợp tính đa hình với quyền ủy thác (delegation). Đó là tính đa hình với lớp gốc để cho các client có thể thực thi nó như lớp gốc. Trong hầu hết các trường hợp, những lời gọi phương thức được ủy thác cho lớp gốc và sau đó các kết quả được thực hiện bên trên, hoặc được decorate, với chức năng bổ sung. Decoration là một kỹ thuật linh hoạt vì nó thực hiện vào lúc runtime.

Demo

DecoratorRealWorldClassDiagram

http://cid-d0e5ddf023bf4324.office.live.com/embedicon.aspx/.Public/Design%20Pattern/DecoratorRealWorld.zip