Mẫu thiết kế trang trí là gì?
Và làm thế nào bạn có thể sử dụng mẫu này trong các dự án Ruby của mình?
Mẫu thiết kế trang trí giúp bạn nâng cao một đối tượng bằng cách thêm khả năng mới vào nó mà không cần phải thay đổi lớp.
Hãy xem một ví dụ!
Ghi nhật ký &Hiệu suất
Trong ví dụ này, chúng tôi đang thực hiện các yêu cầu HTTP bằng cách sử dụng một viên đá quý như ứng dụng khách.
Đây là những gì trông giống như:
require 'restclient' data = RestClient.get("www.rubyguides.com")
Bây giờ :
Giả sử chúng tôi muốn thêm ghi nhật ký vào một số yêu cầu của mình và chúng tôi không muốn thay đổi RestClient
mô-đun.
Chúng ta có thể làm điều này bằng cách sử dụng mẫu trang trí.
Đây là mô-đun ghi nhật ký của chúng tôi :
module LogHTTPRequest def get(url) puts "Sending Request For #{url}" super end end
Thao tác này sẽ in thông tin chúng ta muốn trên màn hình sau đó gọi get
gốc phương thức từ RestClient
.
Để thêm khả năng ghi nhật ký vào một yêu cầu, bạn có thể sử dụng extend
phương pháp.
Như thế này :
class HTTPClient def initialize(client = RestClient) @client = client end def get(*args) @client.get(*args) end end client = HTTPClient.new client.extend(LogHTTPRequest) client.get("rubyguides.com")
Bạn phải tạo HTTPClient
này lớp wrapper vì RestClient
là một mô-đun và bạn không thể tạo các đối tượng từ các mô-đun.
Khi nào sử dụng mẫu trang trí
Vẻ đẹp của mô hình này là bạn chỉ nâng cao một đối tượng , vì vậy bạn có thể có một ứng dụng khách không ghi nhật ký &một ứng dụng ghi nhật ký.
Một lợi ích khác là bạn có thể xếp lớp các bộ trang trí này và có một bộ trang trí kiểm tra hiệu suất, một bộ khác để ghi nhật ký, v.v.
Việc kết hợp các trình trang trí sẽ không thể thực hiện được nếu bạn sử dụng tính năng thừa kế để tạo HTTPClientWithLogging
và một HTTPClientWithPerformanceTesting
lớp học.
Bạn không thể có WithLogging
và WithPerformanceTesting
đồng thời trừ khi bạn tạo lớp này…
class HTTPClientWithLoggingAndPerformanceTesting # ... end
Mẫu trang trí giải quyết được sự cố này trong khi tránh trùng lặp mã &tên lớp điên rồ.
Video
Tóm tắt
Bạn đã tìm hiểu về mẫu thiết kế trang trí , mẫu này giúp bạn thêm khả năng mới cho các đối tượng mà không cần phải thay đổi lớp học.
Đừng thụ động! Bây giờ đến lượt bạn tự mình thực hành và áp dụng khái niệm này. Nó sẽ giúp bạn ghi nhớ điều này khi cần.
Chia sẻ bài viết này để nhiều người cùng đọc nhé 🙂