나는 싱글 톤이되는 자원 관리자와 같은 관리자가 있습니다. 일부 객체는이 관리자의 메소드를 호출해야합니다. 이 연습이 침대 냄새가 나니?싱글 톤 남용?
some object logic: ResourceManager::init()->callMethod();
우리는 싱글 톤에 대한 참조를 사용하지 않고 있습니다. 런타임 중에 가져옵니다. 적합한가요?
나는 싱글 톤이되는 자원 관리자와 같은 관리자가 있습니다. 일부 객체는이 관리자의 메소드를 호출해야합니다. 이 연습이 침대 냄새가 나니?싱글 톤 남용?
some object logic: ResourceManager::init()->callMethod();
우리는 싱글 톤에 대한 참조를 사용하지 않고 있습니다. 런타임 중에 가져옵니다. 적합한가요?
싱글 톤 패턴에는 장점과 단점이 있지만, 사용하는 경우 작성한 내용이 너무 심각하지 않습니다.
하지만 init()의 이름을 getInstance()와 같은 것으로 변경하는 것이 좋습니다.
의 getInstance() 함수를하지 않은 경우 지금까지 귀하의 사용에 관한 한,
a::getInstance()->foo();
a::getInstance()->bar();
대신
a* thing = a::getInstance();
thing->foo();
thing->bar();
쓰기의 유일한 부정적인 잠재적 인 추가 함수 호출 오버 헤드가 될 것이다 인라인되었다.
일반적으로 단일 함수 내에서 동일한 싱글 톤을 여러 번 사용하려는 경우 getInstance()를 한 번 호출하면 훨씬 좋지만 궁극적으로는 코딩 스타일 문제가 더 많을 것이라고 생각합니다. 실제 성능 문제.
알았어, 고마워. –
싱글 톤을 사용하는 건강한 방법은 아주 간단합니다 :
클래스는 ResourceManager {...}; 인스턴스 retuns 소환 및 // 정상
ResourceManager에 & GetResMan (같은 클래스를 구현) {...} // 글로벌 액세스 포인트, 즉, 로컬 정적 파일명 범위에서 정적 또는 심지어 수있다 코너 케이스 싱글을 제공하는 것으로서
문서를 추가로 생성 트릭을 사용할 수 있습니다.
GetResMan(). DoStuff(); 당신이 긍정적 인 경우 안전하게 비난을 무시할 수 - 그것이 좋은지 나쁜지 여부를 여기에서 클라이언트 사이트
에서 가 // 사용은 당신이 실제로 해당 관리자에 대한 싱글을 의미하는지 여부 애플리케이션 로직/디자인에 따라 달라집니다 캠페인.
정제 된 버전에는 두 가지 액세스 기능이있을 수 있습니다. 주류는 const ref를 반환하기 때문에 나머지 클라이언트는 변경 클라이언트 호출을 쉽게 알 수 있습니다. 그러나 클래스의 특성과 사용 사례에 따라 다릅니다.
왜 이것이 싱글 톤 클래스를 악용한다고 생각하십니까? 싱글 톤 패턴은 클래스의 인스턴스화를 하나의 객체로 제한합니다. 이는 시스템 전체에서 작업을 조정하는 데 정확히 하나의 객체가 필요할 때 유용합니다. 메소드를 호출 할 때 어떤 제한도 두지 않습니다. –
답변을 주셔서 감사합니다 –
'init'을 '냄새가 좋지 않습니다'라고 부르면 (첫 번째 호출 만 초기화되므로 이름이 잘못되어 'getInstance()'와 같은 것이 더 적절할 수 있습니다). 하지만 그렇지 않으면 이것은 싱글 톤을 사용하는 꽤 표준적인 방법처럼 보인다. – Dukeling