什么时候在Ruby中使用Singleton类是明智的?

我正在阅读 Ruby中的Singletons.我从来没有真的需要使用它们,但我很好奇,决定查找它们,看看我以前是否应该使用它们,或者如果我知道他们是什么,我可以在将来使用它们用于.

我唯一可以想到使用的是:

>?当我需要一个特殊的对象.示例:“smart”哈希对象,其行为就像一个普通的Ruby哈希与一些额外的怪癖.
>当我想使它只有一个类的一个实例可以存在.

但是,我并不确定我是否需要上述任一项.

解决方法

请注意,Singleton模块中的类混合在功能上等同于具有’class’方法的类或模块,以及有保证的初始化调用或内联初始化.比较Singleton的这种用法
require 'singleton'
class Bar
  include Singleton
  attr_reader :jam
  def initialize
    @jam = 42
  end
  def double
    @jam *= 2
  end
end

b1 = Bar.instance
b1.double
b2 = Bar.instance
b2.double
p b1.jam          #=> 168

与这个无魔术模块:

module Foo
  @jam = 42
  def self.double
    @jam *= 2
  end
  def self.jam
    @jam
  end
end

Foo.double
Foo.double
p Foo.jam          #=> 168

在这两种情况下,您都有一个保持状态的全局对象. (因为在全局范围中创建的每个常量,包括类和模块,都是一个全局对象.)

唯一的功能不同之处在于,对于Singleton,您会延迟对象的初始化,直到您第一次要求它为止.

所以,如果您在类或模块上有“类”方法,并且您使用这些方法来更改该对象的状态(例如,一个跟踪所有子类的类的跟踪),您基本上使用单例.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...