저는 현재 팩토리 디자인 패턴을 구현하려고하고 있는데, C++에서 일반적으로 어떻게 수행되는지 다소 혼란 스럽습니다. 나는 this 웹 페이지를 언급 해왔다.네임 스페이스 함수 대신 정적 클래스 함수를 사용하는 경우?
그래서이 웹 페이지에서는 ComputerFactory라는 팩토리 클래스를 정의하는 예제를 보여줍니다. 이 클래스에는 고정 된 단일 NewComputer 메서드가 있습니다.
class ComputerFactory
{
public:
static Computer *NewComputer(const std::string &description)
{
if(description == "laptop")
return new Laptop;
if(description == "desktop")
return new Desktop;
return NULL;
}
};
NewComputer 정적이라는 사실은이 ComputerFactory의 단일 인스턴스와 관련이없는 것을 의미합니다. 따라서 코드에서이 메서드를 호출하여 작성할 수 있습니다.
ComputerFactor::NewComputer("description");
이제이 클래스를 래핑해야하는 이유가 궁금합니다.
- 인가 내가 유효한 설명 네임 스페이스 기능을 : 그것은 모든 클래스와 연결하는 것은 아닙니다 정말 정적 그리고 있기 때문에, 내 질문에 그래서
namespace ComputerFactory { static Computer *NewComputer(const std::string &description) { if(description == "laptop") return new Laptop; if(description == "desktop") return new Desktop; return NULL; } }
같은 일을하는 것이 더 나을 대안?
- 정적 메서드 만 가진 클래스를 정의하는 것이 이치에 맞습니까? 네임 스페이스를 사용하는 것이 더 합리적이라고 생각됩니다.
이제 정적 인 방법 (예 : 정적 인 '현재 클래스가 몇 개인 지')이 필요한 경우가 있다고 생각하지만 이는 필요한 상황이 아닌 것으로 보입니다. 이견있는 사람?
편집 : 그래서 방금 언급 한 예제는 '일반적인'공장 방법이 아닙니다. 실제로 팩토리 함수가 더 복잡하고 다른 함수 (private 클래스 메소드)를 호출해야 할 수도 있습니다. 이 경우 하위 함수에 액세스 할 수있는 클래스로 팩토리를 래핑하는 것이 좋습니다. 팩토리 메서드가 일반적으로 클래스로 래핑되는 이유는 무엇입니까?