use*_*029 8 ruby oop singleton design-patterns monostate
假设一个类需要加载一个外部库,这需要一些时间来加载,因此只应加载一次.对此的两个自然解决方案是使用单例模式或单稳态模式.在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)
Run Code Online (Sandbox Code Playgroud)
与:
# 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)
Run Code Online (Sandbox Code Playgroud)
由于第二种语法更清晰,在Ruby中使用Singleton有什么好处吗?
单例模式在结构上强制了这样一个事实:你可以never have more than one instance of a class at a time,并且对于开发人员来说,他们正在处理单例是显而易见的。
单一国家强制执行behavior of a singleton without the structure of the monostate.
您可能会发现仍然需要实例数据的情况。因此,单一国家会更好。您可以创建实例,使用方法影响实例数据,并且仍然可以访问静态数据。对于单例,您无法拥有实例数据。
\n\n此外,如果您计划从单例派生类并且希望这些类成为单例,那么您更好的选择是单态。\xe2\x80\x99s 因为从单态派生的所有类都是单态。默认情况下,派生单例类不是单例。您必须将静态方法和属性添加到每个派生类。
\n| 归档时间: |
|
| 查看次数: |
309 次 |
| 最近记录: |