假设一个类需要加载一个外部库,而这个过程需要一些时间,因此应该只加载一次。在这种情况下,两种自然的解决方案是使用单例模式或单态模式。在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)
由于第二种语法更加简洁,那么在Ruby中使用Singleton有哪些优势呢?
require
方法加载一个库并防止它被多次加载。 - steenslagclass Parser; @@parser = load_external_library; def self.parse(sentence); @@parser.parse(sentence); end; end
... 然后在另一个文件中,require 'parser'
。这似乎类似于单例模式,但现在用户代码负责仅需要一次性地加载它,这可能比预期更棘手。有什么想法吗? - user2398029