Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी में डेकोरेटर डिजाइन पैटर्न

डेकोरेटर डिजाइन पैटर्न क्या है?

और आप अपने रूबी प्रोजेक्ट्स में इस पैटर्न का उपयोग कैसे कर सकते हैं?

डेकोरेटर डिज़ाइन पैटर्न नई क्षमताओं . जोड़कर किसी ऑब्जेक्ट को बेहतर बनाने में आपकी सहायता करता है इसमें बिना कक्षा बदले।

आइए एक उदाहरण देखें!

लॉगिंग और प्रदर्शन

इस उदाहरण में हम रेस्ट-क्लाइंट जैसे रत्न का उपयोग करके HTTP अनुरोध कर रहे हैं।

जो दिखता है वह यहां दिया गया है:

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 बनाना होगा रैपर वर्ग क्योंकि RestClient एक मॉड्यूल है और आप मॉड्यूल से ऑब्जेक्ट नहीं बना सकते।

डेकोरेटर पैटर्न का उपयोग कब करें

इस पैटर्न की खूबी यह है कि आप केवल एक वस्तु को बढ़ा रहे हैं , ताकि आपके पास एक गैर-लॉगिंग क्लाइंट और एक लॉगिंग क्लाइंट हो सके।

एक अन्य लाभ यह है कि आप इन सज्जाकारों को परत कर सकते हैं और एक है जो प्रदर्शन परीक्षण करता है, दूसरा लॉगिंग के लिए, आदि।

यदि आप HTTPClientWithLogging बनाने के लिए इनहेरिटेंस का उपयोग करते हैं तो डेकोरेटर्स का संयोजन संभव नहीं होगा , और एक HTTPClientWithPerformanceTesting कक्षा।

रूबी में डेकोरेटर डिजाइन पैटर्न

आपके पास WithLogging नहीं हो सकता है और WithPerformanceTesting उसी समय जब तक आप यह कक्षा नहीं बनाते…

class HTTPClientWithLoggingAndPerformanceTesting
  # ...
end

डेकोरेटर पैटर्न हल करता है कोड दोहराव से बचने . के दौरान यह समस्या और पागल वर्ग के नाम।

वीडियो

सारांश

आपने डेकोरेटर डिज़ाइन पैटर्न के बारे में जान लिया है , यह पैटर्न आपको ऑब्जेक्ट में नई क्षमताएं जोड़ने . में मदद करता है बिना कक्षा बदले।

निष्क्रिय मत बनो! अब इस अवधारणा का अभ्यास करने और इसे स्वयं लागू करने की आपकी बारी है। जरूरत पड़ने पर यह आपको इसे याद रखने में मदद करेगा।

इस लेख को शेयर करें ताकि और लोग इसे पढ़ सकें 🙂


  1. रूबी में कस्टम अपवाद

    रूबी में अपने स्वयं के अपवाद बनाना आसान है। बस इन चरणों का पालन करें: 1. एक नई कक्षा बनाएं अपवाद वर्ग हैं, जैसे रूबी में बाकी सब कुछ! एक नए प्रकार का अपवाद बनाने के लिए, बस एक ऐसा वर्ग बनाएं जो StandardError या उसके किसी बच्चे से विरासत में मिला हो। class MyError < StandardError end raise MyErr

  1. रूबी में ठोस डिजाइन सिद्धांत

    सभी सॉफ्टवेयर एप्लिकेशन समय के साथ बदलते हैं। सॉफ़्टवेयर में किए गए परिवर्तन अनपेक्षित कैस्केडिंग समस्याओं का कारण बन सकते हैं। हालाँकि, परिवर्तन अपरिहार्य है, क्योंकि हम ऐसे सॉफ़्टवेयर का निर्माण नहीं कर सकते हैं जो नहीं बदलता है। जैसे-जैसे सॉफ्टवेयर बढ़ता है, सॉफ्टवेयर की आवश्यकताएं बदलती रहती हैं

  1. रूबी में स्टेट मशीन बनाने के लिए AASM रत्न का उपयोग कैसे करें

    आज आप स्टेट मशीनों के बारे में जानेंगे कि वे कैसे काम करती हैं और AASM रत्न के साथ अपने रूबी प्रोजेक्ट्स में उनका उपयोग कैसे करें। अब : ट्रैफिक लाइट की कल्पना करें… यह लाल, हरा या पीला हो सकता है। जब यह रंग बदलता है, तो अगला रंग वर्तमान . पर आधारित है एक। मान लें कि यह एक ऐसा प्रकार है जो अंध