รูปแบบการออกแบบของมัณฑนากรคืออะไร
และคุณจะนำรูปแบบนี้ไปใช้ในโครงการ 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 ชั้นเรียน

คุณไม่สามารถมี WithLogging และ WithPerformanceTesting ในเวลาเดียวกัน เว้นแต่คุณจะสร้างคลาสนี้…
class HTTPClientWithLoggingAndPerformanceTesting # ... end
ลวดลายมัณฑนากร แก้ ปัญหานี้ในขณะที่หลีกเลี่ยงการทำซ้ำโค้ด &ชื่อคลาสบ้าๆ.
วิดีโอ
สรุป
คุณได้เรียนรู้เกี่ยวกับ รูปแบบการออกแบบเครื่องตกแต่ง รูปแบบนี้ช่วยให้คุณเพิ่มความสามารถใหม่ให้กับวัตถุ โดยไม่ต้องเปลี่ยนคลาส
อย่าเฉยเมย! ตอนนี้ถึงตาคุณแล้วที่จะฝึกฝนและใช้แนวคิดนี้ด้วยตัวเอง มันจะช่วยให้คุณจำสิ่งนี้ได้เมื่อคุณต้องการ
แชร์บทความนี้ให้คนอ่านมากขึ้น 🙂