2011-11-23 8 views
1

나는 싱글 톤 패턴으로 루비에서 싸우고있다.싱글 톤 패턴, 개인 메소드 및 싱글 톤 모듈

싱글 톤은 객체의 단일 인스턴스를 구현하지만 싱글 톤 모듈 없이는 복제 할 수 있는지 잘 모르겠습니다.

개인적인 방법에 문제가 있습니다. 지금 나는 같은 것을 할 필요가 :

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. 싱글 톤 모듈을 사용하는 개인용 메서드를 사용할 방법이 있습니까?

답변

2

1. 위의 좋은 싱글 톤 패턴입니까

아마도 그렇지 않습니다. 클래스 메소드 만 사용하면 단일 "인스턴스"에 대해 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"