8
假設一個類需要加載一個需要一段時間才能加載的外部庫,因此應該只加載一次。兩種自然的解決方案是使用單例模式或單態模式。在Ruby的這個特定上下文中,這兩種解決方案中的任何一種都有什麼優勢?Ruby中的單例模式與單例模式
例如:
# 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)
由於第二語法是更清潔,是否有任何優點在紅寶石使用Singleton?
'require'方法加載一個庫,並防止它被多次加載。 – steenslag 2012-01-02 11:09:37
我特指非Ruby庫,它不能簡單地按需求來處理,雖然你的建議會指向實現同一事物的第三種方式: 'class Parser; @@ parser = load_external_library; def self.parse(sentence); @@ parser.parse(句子);結束;結束' ...然後在另一個文件中,'require'parser''。這似乎與monostate類似,但用戶代碼現在只負責一次,這可能[比預期更復雜](http://ghouston.blogspot.com/2007/05/ruby-require-idiom.html )。有什麼想法嗎? – user2398029 2012-01-02 18:32:51