Ruby中的Singleton vs. Monostate模式

前端之家收集整理的这篇文章主要介绍了Ruby中的Singleton vs. 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)

与:

# 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有什么好处吗?

解决方法

单例模式在结构上强制执行这样一个事实,即一次只能有一个类的实例,并且开发人员明白他们正在处理单例.

monostate强制执行没有monostate结构的单例的行为.

您可能会发现仍需要实例数据的情况.因此,单稳态会更好.您可以创建实例,使用方法来影响实例数据,并仍然可以访问静态数据.使用单例,您不能拥有实例数据.

此外,如果您计划从单例中派生类,并且您希望这些类是单例,那么您更好的选择是单值.这是因为所有来自monostate的类都是monostate.默认情况下,类派生的单例类不是单例.您必须将静态方法属性添加到每个派生类.

猜你在找的Ruby相关文章