What is the correct way of ensuring a single instance of a class? [duplicate]

馋奶兔 提交于 2019-12-07 16:21:23

问题


In java I would create something like this:

private static MyClass instance;

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

What is the appropriate way to obtain the same functionality in ruby?

Update: I've read about 'include Singleton' but when I tried to do it in irb on Ruby 1.9 I got:

[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>'

回答1:


there are already answers to how to do it in Ruby, but I'd ask first do you need to?

There is no need to copy your Java patterns to Ruby. I'm doing Ruby from 2005 and never did I need a singleton class.

Why do you need an instance to begin with? Why can't you just define class methods and call them on the class.

As I understand you are trying smth like:

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

But instead you can just do this:

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

And since thre is only one class Klass your problem is natively solved and with less to type too :)

classes in Ruby are just instances of class Class, so they can have everything an instance can have.



来源:https://stackoverflow.com/questions/2310007/what-is-the-correct-way-of-ensuring-a-single-instance-of-a-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!