저는 C++ 개발 및 디자인에 새로운 것이므로 사전에 제 질문을 사과하거나 모호합니다. 필자는 코드에 몇 가지 별개의 무관 한 계층 구조를 가지고 있으며 Alexandrescu가 설명하고 구현 한 일반 팩토리를 사용하여 이러한 계층 구조에서 개체를 인스턴스화하려고합니다.
내가 어려움을 겪고있는 부분은 초기화 단계입니다. 클래스에는 초기화 요구 사항이 매우 다릅니다. 때로는 초기화에 필요한 데이터를 저장소 (DB)에서 조회 할 수 있으며이 경우 특정 클래스의 일부 Init() 메소드에서 초기화 프로 시저를 캡슐화 할 수 있습니다. 그러나 다른 경우에는 데이터가 인스턴스화 순간에 국부적으로 만 알려져 있으므로 객체에 수동으로 전달해야합니다. 나는 이것을하기위한 통일 된 방법을 생각해 내는데 어려움을 겪고있다. 누구든지 이런 종류의 문제에 접근 할 때 어떤 의견을 갖고 있습니까? 감사합니다.C++의 객체 초기화 및 객체 팩터
답변
너는 을 오버플로하고있다. 고속도로 ... 맨 먼저.
공장이 거의 필요하지 않으며 두 개의 공장이 동일하지 않습니다 (눈치 챘 듯이).
이 기본 클래스에 명확한 의미가 없으므로 모든 팩토리에 기본 클래스를 제공하는 것은 쓸모가 없습니다. 그것은 무엇을 형성합니까? Bird
s? Car
s? 그들은 서로 관련이 없습니다 ... Object
s? 이것은 자바가 아닙니다!
공장을 사용하려는 경우 (어떤 이유로) Factory
은 종류의 개체를 생성해야하며 모두 공통 기본 클래스에서 파생됩니다. 여러 종류의 물건이 있다면 여러 종류의 공장이 필요합니다.
그리고 팩토리 코드가 반복되는 경우 템플리트를 사용하여 공통 코드를 올리십시오.
정확하게 추측 한 경우, 팩토리 메소드에 다른 인수 세트를 전달하는 방법을 모르는 것이 문제입니다. 그렇다면 하나의 계층 구조를 만들도록 조언 할 수 있습니다. /하자. FactoryHelper라고 부르 자. 이 계층의 구체적인 클래스에는 구체적인 클래스의 인스턴스화를위한 특정 데이터가 포함됩니다. 예를 들어 ConcreteProductA의 FactoryHelperA에는 문자열이 포함되고 ProductB의 FactoryHelperB에는 int가 포함됩니다. 팩토리의 abstact 메소드는 추상 기본 클래스 인 FactoryHelper를 인수로 허용해야합니다. 공장의 구체적인 메소드는이 팩토리를 콘크리트 FactoryHelperA 또는 FactoryHelperB로 캐스팅하고 특정 제품의 인스턴스화를위한 특정 데이터를 가져옵니다.
하지만 그다지 좋은 디자인은 아닙니다. 공장 방법을 잘못된 방법으로 사용하려고 노력하고있는 것 같습니다.
Alexandrescu는 정책의 팬이기도하므로 공장에 대한 할당 정책을 가질 수 있습니다. 그러나 구체적인 할당 필요성이 런타임 데이터에 의존하면 런타임 전환 할당자를 처리 할 수 없다고 생각합니다. 아마도 할당 자 콜백 컬렉션을 등록하십시오 ... –
은 단순히 공장을 사용하지 마십시오 (이러한 문제를 피하기 위해). 공장은 몇 가지 문제를 해결할 수 있지만 실제로는 거의 필요하지 않습니다. –
답장을 보내 주셔서 감사합니다. "런타임 전환 할당 자"가 의미하는 바를 설명해 주시겠습니까? – stas