【问题标题】:Singleton patterns, private methods and singleton module单例模式、私有方法和单例模块
【发布时间】:2012-01-04 13:41:31
【问题描述】:

我正在与 Ruby 中的单例模式作斗争。

我知道单例实现了一个对象的单个实例,但我不太明白我们是否可以在没有单例模块的​​情况下复制它。

然后是私有方法的问题;现在我必须做这样的事情:

class MyTestClass
  private_class_method :new
  class << self
    def test
      puts hello
    end

    private
    def hello
      'hello world'
    end
  end
end

MyTestClass.test

所以我的问题是:

  1. 以上是好的单例模式吗?
  2. 这会确保只有一个实例吗?
  3. 有没有办法让私有方法使用单例模块?

【问题讨论】:

    标签: ruby singleton access-specifier


    【解决方案1】:

    1 .以上是不是很好的Singleton模式

    可能不会。仅使用类方法不会获得为单个“实例”执行initialize 函数的好处,因此它缺少一些您通常会在单例中找到的部分。 Ruby 足够灵活,因此您可以根据需要将任何缺少的功能附加到“类”对象,但它开始看起来有点难看。

    2 。这会确保只有一个实例吗?

    是的。您正在修改代表类的对象,并且只有一个。

    3 .有没有办法使用单例模块拥有私有方法?

    是的。你有没有尝试过?正如您所期望的那样。

    class Test
      include Singleton
      def public_test
        "foo"
      end
      private
      def private_test
        "bar"
      end
    end
    
    Test.instance.public_test  # => "foo"
    Test.instance.private_test # => throws exception
    Test.instance.send(:private_test) # => "bar"
    

    【讨论】:

      猜你喜欢
      • 2012-09-25
      • 2011-09-05
      • 2013-12-02
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多