1

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. これにより、インスタンスが1つだけになるようになりますか?
  3. シングルトンモジュールを使用してプライベートメソッドを作成する方法はありますか?
4

1 に答える 1

2

1。上記は良いシングルトンパターンですか

おそらくそうではありません。クラスメソッドのみを使用するinitializeと、単一の「インスタンス」に対して関数を実行するメリットが得られないため、シングルトンで通常見られるいくつかの部分が欠落しています。Rubyは十分な柔軟性を備えているため、必要に応じて不足している機能を「クラス」オブジェクトに追加できますが、見た目は醜いものになります。

2。これにより、インスタンスが1つだけになるようになりますか?

はい。クラスを表すオブジェクトを変更していますが、1つしかありません。

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"
于 2011-11-23T10:22:39.300 に答える