确保类的单个实例的正确方法是啥? [复制]

Posted

技术标签:

【中文标题】确保类的单个实例的正确方法是啥? [复制]【英文标题】:What is the correct way of ensuring a single instance of a class? [duplicate]确保类的单个实例的正确方法是什么? [复制] 【发布时间】:2011-01-19 13:57:24 【问题描述】:

在java中我会创建这样的东西:

private static MyClass instance;

public static MyClass getInstance() 
  if(instance != null) 
    return instance;
  
  instance = new MyClass();
  return instance;

在 ruby​​ 中获得相同功能的适当方法是什么?

更新:我已经阅读了有关“包含 Singleton”的信息,但是当我尝试在 Ruby 1.9 上的 irb 中执行此操作时,我得到了:

[vertis@raven:~/workspace/test]$ ruby -v
ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-darwin9.4.0]
[vertis@raven:~/workspace/test]$ irb
irb(main):001:0> class TestTest
irb(main):002:1>   include Singleton
irb(main):003:1> end
NameError: uninitialized constant TestTest::Singleton
    from (irb):2:in `<class:TestTest>'
    from (irb):1
    from /usr/local/bin/irb:12:in `<main>'

【问题讨论】:

发现我只需要一个 require 语句......尽管关于正确方法的讨论仍然存在(并且根本没有浪费对它的需求) 【参考方案1】:

已经有如何在 Ruby 中做到这一点的答案,但我想先问你需要吗?

无需将您的 Java 模式复制到 Ruby。我从 2005 年开始使用 Ruby,从来不需要单例类。

为什么需要一个实例开始?为什么不能只定义类方法并在类上调用它们。

据我了解,您正在尝试类似:

instance = Klass.new
instance.foo
.. then somewhere else
instance = Klass.new # expecting this to return the same instance
instance.bar

但是你可以这样做:

Klass.foo
... in other place
Klass.bar

而且由于只有一个类 Klass,因此您的问题已在本地解决,并且输入的内容也更少:)

Ruby 中的类只是 Class 类的实例,因此它们可以拥有实例可以拥有的一切。

【讨论】:

以上是关于确保类的单个实例的正确方法是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中创建日期的正确方法是啥? [复制]

我需要正确理解 Java 中的抽象是啥? [复制]

命名类的正确方法是啥? [关闭]

使用通用虚函数实现的任意组合实现派生类的正确方法是啥?

SQL(Java,h2):检索我刚刚插入数据库的单个项目的唯一 ID 的最佳方法是啥? [复制]

从异步函数传播异常的正确方法是啥? [复制]