Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

รูปแบบการออกแบบมัณฑนากรใน Ruby

รูปแบบการออกแบบของมัณฑนากรคืออะไร

และคุณจะนำรูปแบบนี้ไปใช้ในโครงการ Ruby ได้อย่างไร

รูปแบบการออกแบบมัณฑนากรช่วยให้คุณปรับปรุงวัตถุโดยเพิ่มความสามารถใหม่ โดยไม่ต้องเปลี่ยนคลาส

มาดูตัวอย่างกัน!

การบันทึกและประสิทธิภาพ

ในตัวอย่างนี้ เรากำลังส่งคำขอ HTTP โดยใช้ gem เช่น rest-client

นี่คือลักษณะ:

require 'restclient'

data = RestClient.get("www.rubyguides.com")

ตอนนี้ :

สมมติว่าเราต้องการเพิ่มการบันทึกลงในคำขอบางรายการของเรา และเราไม่ต้องการเปลี่ยน RestClient โมดูล

เราสามารถทำได้โดยใช้ลวดลายมัณฑนากร

นี่คือโมดูลการบันทึกของเรา :

module LogHTTPRequest
  def get(url)
    puts "Sending Request For #{url}"
    super
  end
end

สิ่งนี้จะพิมพ์ข้อมูลที่เราต้องการบนหน้าจอแล้วเรียกต้นฉบับ get เมธอดจาก RestClient .

หากต้องการเพิ่มความสามารถในการบันทึกลงในคำขอ คุณสามารถใช้ extend วิธีการ

ถูกใจสิ่งนี้ :

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")

คุณต้องสร้าง HTTPClient . นี้ คลาส wrapper เนื่องจาก RestClient เป็นโมดูลและคุณไม่สามารถสร้างวัตถุจากโมดูลได้

เมื่อใดควรใช้ลวดลายมัณฑนากร

ความงามของลวดลายนี้คือคุณกำลังเสริม หนึ่งวัตถุ ดังนั้นคุณจึงสามารถมีไคลเอ็นต์ที่ไม่บันทึกข้อมูลการใช้งาน &ไคลเอ็นต์การบันทึกได้

ข้อดีอีกประการหนึ่งคือคุณสามารถจัดเลเยอร์มัณฑนากรเหล่านี้ &มีอันหนึ่งที่ทำการทดสอบประสิทธิภาพ อีกอันสำหรับการบันทึก ฯลฯ

การรวมมัณฑนากรจะเป็นไปไม่ได้หากคุณใช้มรดกเพื่อสร้าง HTTPClientWithLogging และ HTTPClientWithPerformanceTesting ชั้นเรียน

รูปแบบการออกแบบมัณฑนากรใน Ruby

คุณไม่สามารถมี WithLogging และ WithPerformanceTesting ในเวลาเดียวกัน เว้นแต่คุณจะสร้างคลาสนี้…

class HTTPClientWithLoggingAndPerformanceTesting
  # ...
end

ลวดลายมัณฑนากร แก้ ปัญหานี้ในขณะที่หลีกเลี่ยงการทำซ้ำโค้ด &ชื่อคลาสบ้าๆ.

วิดีโอ

สรุป

คุณได้เรียนรู้เกี่ยวกับ รูปแบบการออกแบบเครื่องตกแต่ง รูปแบบนี้ช่วยให้คุณเพิ่มความสามารถใหม่ให้กับวัตถุ โดยไม่ต้องเปลี่ยนคลาส

อย่าเฉยเมย! ตอนนี้ถึงตาคุณแล้วที่จะฝึกฝนและใช้แนวคิดนี้ด้วยตัวเอง มันจะช่วยให้คุณจำสิ่งนี้ได้เมื่อคุณต้องการ

แชร์บทความนี้ให้คนอ่านมากขึ้น 🙂