假设一个类需要加载一个外部库,该库需要一些时间来加载,因此应该只加载一次。对此的两个自然解决方案是使用单例模式或单态模式。在 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 有什么好处吗?