2010-02-22 2 views
7

Singletons을 Perl로 구현하는 가장 좋은 방법은 무엇입니까?펄에서 싱글 톤 클래스를 구현하려면 어떻게해야합니까?

+1

싱글 톤을 구현하는 가장 좋은 방법은 ** Do not! ** –

+0

@gbacon - sigleton을 구현하는 이유는 무엇입니까? 내가 광범위하게 (또는 거의 절대) 사용 해본 적이 없다는 사실을 인정했지만 필자는 필연적으로 그것들을 필요로하지 않는 것과는 반대로 그들을 피할 어떤 이유도 알지 못한다. – DVK

+3

@DVK 싱글 톤은 멋진 옷을 입은 글로벌 변수입니다. –

답변

16

Class::Singleton 모듈을 사용할 수 있습니다.

"싱글 톤"클래스는 my 또는 state 변수를 사용하여 쉽게 구현할 수 있습니다 (후자는 Perl 5.10부터 사용 가능). 그러나 아래의 @ Michael의 코멘트를보십시오.

+4

모듈이 서브 클래스화된 경우 실패합니다. 인스턴스 변수는 최종 패키지에 있어야합니다. 클래스 :: 싱글 톤이 권리를 가져옵니다. –

+3

상속 된 경우 실제로 "실패"하지 않습니다. 상속 된 클래스는 다른 클래스와 마찬가지로 싱글 톤 객체에 액세스하여 상호 작용해야합니다. 그러나 그 모든 것은 당신이하려는 일에 달려 있습니다. –

9

무스를 사용중인 경우 MooseX::Singleton입니다. 인터페이스는 Class :: Singleton과 호환됩니다.

2

싱글 요약 : 정상적인 개체가 작동 대부분의 시간

  • .
  • 싱글 톤에주의하십시오. 싱글은 좋은 아이디어이지만
  • 난 그냥 보통의 객체를 구현하고 그것을 사용하는 경향이 가능

만큼 상호 작용을 지역화. 이러한 객체가 하나 뿐인 것이 중요 할 경우 두 번째 객체가 만들어지면 치명적인 예외가 발생하도록 생성자를 수정합니다. 다양한 싱글 톤 모듈은 의존성을 추가하는 것 외에 많은 일을하지 않는 것 같습니다.

쉽고 작동하기 때문에 이상한 미래에 내 앱에서 두 번째 개체로 작업해야 할 때 변경 사항이 최소화됩니다.

나는 또한 '싱글 톤'객체와의 상호 작용을 현지화하고 가능한 한 적은 곳에서 상호 작용을 유지합니다. 따라서 모든 객체가 싱글 톤에 직접 액세스하는 대신, "Application"객체를 통해 모든 상호 작용을 중재합니다. 가능한 한 응용 프로그램 개체는 'singleton'에서 데이터를 가져 와서 다른 개체의 메서드에 매개 변수로 전달합니다. 다른 객체들로부터의 응답은 munged되어 '싱글 톤'으로 전달 될 수 있습니다. 이 모든 노력은 '싱글 톤'객체에서 변경해야 할 때와 원래의 '싱글 톤'객체를 사용할 필요가 없거나 사용할 수있는 다른 객체에서 다른 객체를 재사용하고자 할 때 도움이됩니다.

+1

싱글 톤의 요점을 놓치고 있다고 생각합니다. 그것은 당신이 복잡한 중재를 모두 할 필요가 없도록 사용할 수있는 패턴입니다. 당신은 그것을 사용할 필요는 없지만 그것을 필요로하지 않기 때문에 단순히 그것을 할인하지 마십시오. 설명 된 구성표에 모든 것이 적합하지는 않습니다. –

관련 문제