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

रूबी ऑब्जेक्ट्स को डेकोरेटर पैटर्न से बढ़ाएं: एक व्यावहारिक गाइड

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

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

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

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

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

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

यह ऐसा दिखता है:

 require 'restclient' data = RestClient.get("www.rubyguides.com") 

अब:

मान लीजिए कि हम अपने कुछ अनुरोधों में लॉगिंग जोड़ना चाहते हैं, और हम RestClient मॉड्यूल को बदलना नहीं चाहते।

हम इसे डेकोरेटर पैटर्न का उपयोग करके कर सकते हैं।

यहां हमारा लॉगिंग मॉड्यूल है:

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

यह स्क्रीन पर हमारे द्वारा चाही गई जानकारी प्रिंट करेगा फिर RestClient से मूल get मेथड को कॉल करेगा।

किसी अनुरोध में लॉगिंग क्षमताएं जोड़ने के लिए आप 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. Ruby में कस्टम अपवाद में महारत हासिल करें: एक चरण-दर-चरण गाइड Ruby में कस्टम अपवाद में महारत हासिल करें: एक चरण-दर-चरण गाइड

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

  1. मजबूत रूबी एप्लिकेशन के लिए SOLID डिज़ाइन सिद्धांतों में महारत हासिल करें मजबूत रूबी एप्लिकेशन के लिए SOLID डिज़ाइन सिद्धांतों में महारत हासिल करें

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

  1. रूबी में AASM के साथ स्टेट मशीन्स में महारत हासिल करें: एक व्यावहारिक गाइड रूबी में AASM के साथ स्टेट मशीन्स में महारत हासिल करें: एक व्यावहारिक गाइड

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