รูปแบบการออกแบบของมัณฑนากรคืออะไร
และคุณจะนำรูปแบบนี้ไปใช้ในโครงการ 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
ลวดลายมัณฑนากร แก้ ปัญหานี้ในขณะที่หลีกเลี่ยงการทำซ้ำโค้ด &ชื่อคลาสบ้าๆ.
วิดีโอ
สรุป
คุณได้เรียนรู้เกี่ยวกับ รูปแบบการออกแบบเครื่องตกแต่ง รูปแบบนี้ช่วยให้คุณเพิ่มความสามารถใหม่ให้กับวัตถุ โดยไม่ต้องเปลี่ยนคลาส
อย่าเฉยเมย! ตอนนี้ถึงตาคุณแล้วที่จะฝึกฝนและใช้แนวคิดนี้ด้วยตัวเอง มันจะช่วยให้คุณจำสิ่งนี้ได้เมื่อคุณต้องการ
แชร์บทความนี้ให้คนอ่านมากขึ้น 🙂