Một trong những khía cạnh quan trọng nhất trong vượt trình cách tân và phát triển một vận dụng mà các lập trình viên phải cạnh tranh là sự vậy đổi. Khi mong thêm hoặc sa thải một bản lĩnh của một đối tượng, điều đầu tiên chúng ta nghĩ cho là thừa kế (extends). Tuy nhiên, vượt kế ko khả thi vì nó là static, chúng ta bắt buộc thêm những lớp nhỏ mới vào trong 1 chương trình lúc nó đã có biên dịch cùng thực thi. Để xử lý vấn đề này, chúng ta cũng có thể sử dụng Decorator Pattern được trình làng trong phần tiếp sau của nội dung bài viết này.

Bạn đang xem: Decorator pattern là gì


Nội dung


Decorator Pattern là gì?

Attach additional responsibilities lớn an object dynamically. Decorators provide a flexible alternative khổng lồ subclassing for extending functionality.

Decorator pattern là giữa những Pattern ở trong nhóm kết cấu (Structural Pattern). Nó được cho phép người cần sử dụng thêm tính năng mới vào đối tượng hiện tại cơ mà không muốn ảnh hưởng đến các đối tượng người tiêu dùng khác. Kiểu kiến thiết này có cấu tạo hoạt động như một lớp bao quanh (wrap) mang lại lớp hiện tại có. Mỗi một khi cần thêm nhân tài mới, đối tượng người tiêu dùng hiện dành được wrap vào một đối tượng người sử dụng mới (decorator class).

Decorator pattern sử dụng composition vậy vì inheritance (thừa kế) để không ngừng mở rộng đối tượng. Decorator pattern còn được gọi là Wrapper hay Smart Proxy.

Xem thêm: Hướng Dẫn Kích Hoạt Sách Id Và Tra Mã Kích Hoạt Moon Là Gì, Hướng Dẫn Kích Hoạt Sách Id Và Tra Mã Id Bài Tập

Cài đặt Decorator Pattern như thế nào?

Decorator pattern hoạt động dựa vào một đối tượng đặc biệt, được điện thoại tư vấn là decorator (hay wrapper). Nó gồm cùng một interface như một đối tượng mà nó cần bao bọc (wrap), vì chưng vậy phía client sẽ không còn nhận thấy khi bạn đưa mang đến nó một wrapper cụ vì đối tượng gốc.

Tất cả những wrapper tất cả một ngôi trường để lưu trữ một quý hiếm của một đối tượng người tiêu dùng gốc. Hầu hết các wrapper khởi chế tạo ra trường đó với một đối tượng người sử dụng được truyền vào constructor của chúng.

Vậy làm cố nào để sở hữu thể đổi khác hành vi của đối tượng? Như vẫn đề cập, wrapper tất cả cùng interface cùng với các đối tượng đích. Khi bạn gọi một cách tiến hành decorator, nó thực hiện cùng một cách làm trong một đối tượng người tiêu dùng được wrap và tiếp đến thêm một cái gì đó (tính năng mới) vào kết quả, công việc này tùy nằm trong vào ngắn gọn xúc tích nghiệp vụ.

*
*

Như chúng ta thấy, với Decorator khối hệ thống của bọn họ linh hoạt hơn khôn cùng nhiều. Chúng ta có thể dễ dàng gán một nhân viên sang mục đích TeamMember, TeamLeader, Manager.

EmployeeComponent.java

package com.dienmay.edu.vn.patterns.structural.decorator;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public interface EmployeeComponent String getName();void doTask();void join(Date joinDate);void terminate(Date terminateDate);default String formatDate(Date theDate) DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");return sdf.format(theDate);default void showBasicInformation() System.out.println("-------");System.out.println("The basic information of " + getName());join(Calendar.getInstance().getTime());Calendar terminateDate = Calendar.getInstance();terminateDate.add(Calendar.MONTH, 6);terminate(terminateDate.getTime());EmployeeConcreteComponent.java

package com.dienmay.edu.vn.patterns.structural.decorator;import java.util.Date;public class EmployeeConcreteComponent implements EmployeeComponent {private String name;public EmployeeConcreteComponent (String name) this.name = name;