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

रूबी में सिंगलटन पैटर्न का उपयोग कैसे करें (और आपको इससे क्यों बचना चाहिए)

क्या आप कभी ऐसा वर्ग बनाना चाहते हैं जिसमें केवल एक उदाहरण हो?

हाँ? नहीं? शायद?

खैर…

ठीक यही सिंगलटन पैटर्न . है है।

इसमें कोई समस्या नहीं है।

लेकिन कुछ लोग इसे एक विरोधी पैटर्न कहते हैं क्योंकि इसे खराब डिज़ाइन के बहाने के रूप में इस्तेमाल किया जा सकता है।

आइए एक कोड उदाहरण देखें ताकि आप सीख सकें कि यह कैसे काम करता है।

सिंगलटन पैटर्न कोड उदाहरण

सिंगलटन पैटर्न का विचार यह है कि आप केवल एक उदाहरण वाली कक्षा चाहते हैं।

यहां बताया गया है :

  • आप new बनाते हैं विधि निजी
  • आप instance . नामक एक वर्ग विधि को परिभाषित करते हैं जो कक्षा के लिए अद्वितीय उदाहरण देता है

क्योंकि यह एक लोकप्रिय डिज़ाइन पैटर्न है, रूबी मानक पुस्तकालय एक Singleton . के साथ आता है मॉड्यूल आप किसी भी कक्षा में शामिल कर सकते हैं।

ऐसा दिखता है :

require 'singleton'

class Shop
  include Singleton
end

अब अगर आप Shop . बनाने की कोशिश करते हैं ऑब्जेक्ट के साथ Shop.new आप इसे देखेंगे:

Shop.new
# NoMethodError: private method `new' called for Shop:Class

और अगर आप एक और केवल Shop प्राप्त करना चाहते हैं जिस वस्तु का आप उपयोग कर सकते हैं instance विधि:

Shop.instance.object_id

# 5659218

Shop.instance.object_id

# 5659218

आप बता सकते हैं कि यह हमेशा एक ही वस्तु है क्योंकि object_id कभी नहीं बदलता।

आपको क्या याद रखना चाहिए :

यह एक सरल पैटर्न है, यह वस्तु निर्माण को 1 वस्तु तक सीमित करता है और आप जब चाहें उस वस्तु का अनुरोध कर सकते हैं।

आपको इस पैटर्न का उपयोग क्यों नहीं करना चाहिए

सिंगलटन पैटर्न अक्सर किसी न किसी रूप में वैश्विक चर होने का बहाना होता है और हम जानते हैं कि वैश्विक चर खराब हैं क्योंकि आपका उन पर कोई नियंत्रण नहीं है। इससे चीजों का परीक्षण करना कठिन हो जाता है और यह युग्मन को बढ़ा सकता है।

<ब्लॉककोट>

"सिंगलटन के साथ वास्तविक समस्या यह है कि वे आपको किसी वस्तु की उचित दृश्यता के बारे में ध्यान से न सोचने के लिए इतना अच्छा बहाना देते हैं।" - केंट बेक

कल्पना कीजिए कि आपके पास एक ऐसी वस्तु है जिस पर आपकी अधिकांश कक्षाएं निर्भर करती हैं, यही सिंगलटन पैटर्न बन सकता है। गुड लक रिफैक्टरिंग कि!

अब :

क्या इस पैटर्न का कोई अच्छा उपयोग है?

गीथब पर खोज करने से नल ऑब्जेक्ट पैटर्न के संयोजन के साथ सिंगलटन पैटर्न का उपयोग करते हुए कुछ रेपो मिले।

मुझे लगता है कि यह समझ में आता है, रेल इसे एक्शनपैक के हिस्से के रूप में उपयोग करता है।

यह रहा कोड :

class AllType < Type
  include Singleton

  def initialize
    super "*/*", :all
  end

  def all?; true; end
  def html?; true; end
end

यह एक ऐसा वर्ग है जो Type . से इनहेरिट करता है ।

जब आप एक AllType बनाते हैं instance . के माध्यम से वस्तु विधि, यह सुपर को कॉल करेगा और ऑब्जेक्ट को वापस कर देगा।

हर बार जब आप instance . पर कॉल करते हैं उसके बाद आपको वही ऑब्जेक्ट मिलेगा।

निष्कर्ष में :

हां, यह पैटर्न सही परिस्थितियों में उपयोगी हो सकता है, लेकिन आप इसके बारे में ज्यादा सोचे बिना इसका इस्तेमाल नहीं करना चाहते।

वीडियो

सारांश

आपने सिंगलटन डिज़ाइन पैटर्न के बारे में सीखा, इसे रूबी में कैसे लागू किया जाए और आपको ज्यादातर समय इससे क्यों बचना चाहिए।

आप इस पैटर्न के बारे में क्या सोचते हैं? क्या आपने इसे पहले देखा है? मुझे टिप्पणियों में बताएं 🙂

पढ़ने के लिए धन्यवाद!


  1. रूबी उपनाम कीवर्ड का उपयोग कैसे करें

    आप रूबी पद्धति को दो तरह से वैकल्पिक नाम दे सकते हैं: उपनाम (कीवर्ड) उपनाम_विधि क्योंकि वे एक ही काम को थोड़े अलग तरीके से करते हैं, यह एक भ्रमित करने वाला विषय हो सकता है। यह छवि मतभेदों का सारांश है : आइए एक ठोस समझ पाने के लिए इन अंतरों को और अधिक विस्तार से देखें! उपनाम कीवर्ड सबसे पहले

  1. अपने iPhone का नाम कैसे बदलें (और आपको क्यों चाहिए)

    आपके नए iPhone का एक नाम है जिसमें डिफ़ॉल्ट रूप से आपका वास्तविक नाम शामिल होता है। जब तक आप अपने Apple ID के लिए छद्म नाम का उपयोग नहीं करते हैं या अपना iPhone सेट करते समय, आपका वास्तविक नाम आपके iPhone के नाम में भी दिखाई देगा। अपने iPhone का नाम बदलने का तरीका यहां बताया गया है। यह ट्यूटोरियल य

  1. Microsoft Editor:इसका उपयोग कैसे करें और वह सब कुछ जो आपको पता होना चाहिए

    “आप लिखकर कुछ भी बना सकते हैं” ~ सी.एस. लुईस फिर भी लेखन कला का सबसे शुद्ध रूप है जहां कोई भी शब्दों के रूप में कुछ भी बना और व्यक्त कर सकता है। सहमत हों या न हों, लेकिन गहराई से हम सभी पैदाइशी लेखक हैं। हममें से कुछ लोग अपने उदास प्रिय डायरी क्षणों को पसंद करते हैं, जहां हममें से कुछ अधिक पेशेवर ल