2012-03-26 2 views
5

응용 프로그램 용 로거를 만들고 있습니다. 제 3 자 로거 라이브러리를 사용하고 있습니다. 어떤 로거가 싱글 톤으로 구현되는지.싱글 톤 클래스 확장이 잘못 되었습니까?

더 많은 정적 함수를 추가하고 싶기 때문에이 로거 클래스를 확장했습니다. 이러한 정적 함수에서 나는 내부적으로 하나의 인스턴스 인 Logger (상속받은)를 사용합니다.

MyLogger의 인스턴스를 만들지 않고 수퍼 클래스의 getInstance() 메서드를 다시 구현하지도 않았습니다. 하지만 부모 클래스 (Loggger) 소멸자가 액세스 할 수 없으므로 MyLogger의 소멸자를 만들 수없는 것처럼 경고를 받고 있습니다.

알고 싶습니다. 내가 잘못하고 있습니까? 싱글 톤 상속이 잘못되었거나 피해야합니까 ??

답변

4

은 단순히 정적 기능을 추가 할 서브 클래스에 필요는 없습니다 (안티 패턴으로 그것을 설명 생각의 학교가있다).

  • 사용 무료 - 서 기능은 C 안에 ++ 네임 스페이스
  • C#을
  • 를 사용하여 자바 도우미 클래스의 확장 클래스를 사용하여 여기에 내가 싱글을 서브 클래 싱하는 것을 선호 언어 별 접근 방식은 당신이 싱글에서 필요로하는 모든 방법에 대해 래퍼를 작성해야하기 때문에
  • 는, 클래스가 적절한 해결책이 아니다 동안 나는 래퍼를 작성하는 생각 오브젝티브 C
+0

나는 C++ 언어를 사용하고있다. 싱글 톤 로거 클래스에서 상속받지 않는 정적 메서드 만 래퍼 클래스를 만들려고 생각하고있다. 어때? 그리고 C++에 대해 위에서 설명한 방법을 자세히 설명해주십시오. 고마워요. – EngineeredBrain

+0

@AnwarShaikh 그게 효과가 있습니다. 자립 기능을 사용할 수 없기 때문에 이것이 자바에서 할 일입니다.나는 C++에서 그 경로를 찾아 갈 것이지만, 내가 추가 할 함수들 사이에 상태 나 기타 구현 세부 사항을 공유해야 할 필요가있을 때에 만 가능하다. – dasblinkenlight

+0

감사합니다 !! 나는 그것 위에 포장지를 써서 시험 할 것이다. – EngineeredBrain

0

비 싱글턴을 사용하고 필요한 경우 싱글 톤을 호출합니다. 싱글 톤 (Singleton)을 제거 할 수있는 기회가 생길 때마다 그걸 가져 가십시오.

+0

예, 확실한 싱글 톤은 피할 필요가 있지만, 로거와 같은 것에 사용하면 좋은 것으로 판명됩니다. 싱글 톤에있는 것과 함께 몇 가지 추가 메서드가 필요하면 내부적으로 싱글 톤을 사용하는 싱글 톤을 통해 래퍼 (정적 메서드 만 사용하는 클래스의 래퍼)를 상속해야합니다. – EngineeredBrain

+0

래퍼로 이동하십시오. 그게 내가 '대리인 전화'를 의미하는 것입니다. –

0

가렛 홀 (Garret Hall)에 동의합니다. 가능한 경우 싱글 톤 (Sington 's)을 피해야합니다. 즉, 한 가지 이유 때문에 잘못된 것으로 보지 않습니다. Singleton을 구현 한 사람이 그것을 확장 할 수 있습니다. API 개발자가 싱글 톤 클래스 로거를 확장하기를 원하지 않는다면, C++에서 생성자를 private로 만들거나, 사용하는 언어에 맞는 메서드를 private로 만들 수 있습니다. 옆으로 싱글 톤 패턴의 장점을 떠나

0

의 종류를 사용합니다. 그리고 당신은 수십 가지 기능을 작성하게됩니다.

또한 싱글 톤에서 사용할 수있는 모든 기능을 사용하지 못하도록 제한하고 있습니다.

좋은 아이디어!