안녕하세요.
Service Locator 패턴에 대해 here을 읽은 후에 정적 멤버 만있는 클래스가 실제로 갈 길이 멀거나 정상적인 C와 같은 인터레이스가 더 적절하지 않은 것으로 생각됩니다. 나는 그들이 심지어 필요하지 않을 때 항상 class
키워드 주위에 던지는 사람들을 만난다. 링크 된 페이지에서 가져온 정적 멤버 클래스와
예 : 여기정적 멤버 클래스와 일반 c와 유사한 인터페이스
class Locator
{
public:
static IAudio* GetAudio() { return service_; }
static void Register(IAudio* service)
{
service_ = service;
}
private:
static IAudio* service_;
};
하나가 너무 그것을 할 수있는 방법 :
// in .h
namespace Locator{
IAudio* GetAudio();
void Register(IAudio* service);
}
// in .cpp
namespace Locator{
namespace {
IAudio* service_;
}
IAudio* GetAudio() {
return service_;
}
void Register(IAudio* service) {
service_ = service;
}
}
두 예제는 Locator::GetAudio()
와 Locator::Register(...)
와 정확히 같은 방식으로 호출 할 수 있습니다. 위의 것 중 하나가 다른 것보다 우수합니까? 그들은 같은가요? 이것을 달성하는 더 좋은 방법이 있습니까? 아니면 개인적인 취향에 관한 것입니까? 어떤 도움을 주셔서 감사합니다. :)
이것은 끔찍한 패턴입니다. 나는 이와 같은 전역 변수를 추천하는 사이트의 조언을 듣지 않을 것이다. – Puppy
@Xeo : 실제 질문 : 인스턴스 별 데이터를 정기적으로 제공 할 수있는 경우 왜 전역 상태를 사용합니까? –
@Matthieu : 그러면 모든 로케이터 인스턴스에 오디오 인터페이스를 등록해야합니다. 아니면 처음에 왜 그런 위치 탐지기가 필요한지를 의미 했습니까? – Xeo