2012-01-02 19 views
8

मान लीजिए कि किसी वर्ग को बाहरी पुस्तकालय लोड करने की आवश्यकता होती है जिसमें लोड करने में कुछ समय लगता है और इस प्रकार केवल एक बार लोड किया जाना चाहिए। इसके लिए दो प्राकृतिक समाधान सिंगलटन पैटर्न या मोनोस्टेट पैटर्न का उपयोग करना होगा। रूबी में इस विशेष संदर्भ में इन समाधानों में से कोई भी लाभ है?रुबी में सिंगलटन बनाम मोनोस्टेट पैटर्न

उदाहरण के लिए:

# Using a Singleton class 
require 'singleton' 

class Parser 
    include Singleton 

    def initialize 
     @parser = load_external_library 
    end 

    def parse(sentence) 
     @parser.parse(sentence) 
    end 
end 

# Then calling using... 
Parser.instance.parse(sentence) 

बनाम:

# Using a Monostate class 

class Parser 
    def self.parse(sentence) 
     @@parser ||= load_external_library 
     @@parser.parse(sentence) 
    end 
end 

# Then calling using... 
Parser.parse(sentence) 

के बाद से दूसरा वाक्य रचना है अधिक स्वच्छ, वहाँ रूबी में सिंगलटन का उपयोग कर के लिए किसी भी लाभ हैं?

+0

'आवश्यकता' विधि लाइब्रेरी लोड करती है और इसे एक से अधिक बार लोड होने से रोकती है। – steenslag

+0

मैं विशेष रूप से एक गैर-रूबी लाइब्रेरी का जिक्र कर रहा था, जिसे केवल आवश्यकता के अनुसार संभाला नहीं जा सकता है, हालांकि आपका सुझाव एक ही चीज़ को प्राप्त करने का तीसरा तरीका इंगित करेगा: 'कक्षा पार्सर; @@ पार्सर = load_external_library; def self.parse (वाक्य); @@ parser.parse (वाक्य); समाप्त; अंत ... फिर एक और फ़ाइल में, 'पार्सर' की आवश्यकता होती है। यह मोनोस्टेट के समान लगता है, लेकिन उपयोगकर्ता कोड अब केवल एक बार आवश्यकता के लिए ज़िम्मेदार है, जो [अपेक्षा से अधिक कठिन] हो सकता है (http://ghouston.blogspot.com/2007/05/ruby-require-idiom.html)। कोई विचार? – user2398029

उत्तर

4

सिंगलटन पैटर्न संरचनात्मक रूप से इस तथ्य को लागू करता है कि आप never have more than one instance of a class at a time कर सकते हैं, और यह डेवलपर्स के लिए स्पष्ट है कि वे एक सिंगलटन से निपट रहे हैं।

मोनोस्टेट behavior of a singleton without the structure of the monostate लागू करता है।

आपको ऐसी परिस्थितियां मिल सकती हैं जहां आपको अभी भी आवृत्ति डेटा की आवश्यकता है। इसलिए एक मोनोस्टेट बेहतर होगा। आप इंस्टेंस बना सकते हैं, इंस्टेंस डेटा को प्रभावित करने के तरीकों का उपयोग कर सकते हैं और अभी भी स्थिर डेटा तक पहुंच सकते हैं। एक सिंगलटन के साथ, आपके पास इंस्टेंस डेटा नहीं हो सकता है।

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

संबंधित मुद्दे