Computer >> Máy Tính >  >> Lập trình >> Ruby

Mẫu thiết kế trang trí trong Ruby

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.

Mẫu thiết kế trang trí trong Ruby

Bạn không thể có WithLoggingWithPerformanceTesting đồ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é 🙂