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