2011-08-21 56 views
5

Jestem całkiem nowy w rozwoju i projektowaniu ++ ++, więc z góry przepraszam za pytanie, które jest niejasne lub źle skonstruowane. Mam kilka różnych i niepowiązanych hierarchii w moim kodzie i chciałbym użyć ogólnej fabryki opisanej i zaimplementowanej przez Alexandrescu do tworzenia instancji obiektów z tych hierarchii.
Część, z którą mam problem, to faza inicjalizacji. Klasy mają bardzo różne potrzeby inicjacyjne. Czasami dane potrzebne do inicjalizacji można wyszukać z pamięci (DB) iw tych przypadkach mogę zamknąć procedurę inicjalizacji w niektórych metodach Init() danej klasy. Ale innym razem dane są znane tylko lokalnie w momencie wystąpienia i muszą zostać przekazane do obiektu ręcznie. Staram się wymyślić jednolity sposób na zrobienie tego. Czy ktokolwiek ma jakieś informacje na temat zbliżających się problemów tego rodzaju? DziękiInicjowanie obiektów i fabrykach obiektów w C++

+0

Alexandrescu jest także fanem zasad, więc możesz mieć politykę alokacji dla swojej fabryki. Jeśli jednak konkretna potrzeba alokacji zależy od danych środowiska wykonawczego, to domyślam się, że nie można ominąć alokatora przełączania runtime. Może zarejestrować kolekcję callbacków przydziału ... –

+0

po prostu nie używaj fabryk (aby uniknąć tych problemów). fabryki mogą rozwiązać niektóre problemy, ale są bardzo rzadko potrzebne –

+0

Dzięki za odpowiedź. Czy mógłbyś wyjaśnić, co masz na myśli przez "przydzielający program do zmiany trybu pracy"? – stas

Odpowiedz

4

Pędzisz autostradą Over-Engineering ... najpierw głową.

Fabryki są rzadko wymagane, a żadne dwie fabryki nie są do siebie podobne (jak zauważyliście).

Nie ma sensu próbować dostarczać podstawowej klasy dla wszystkich fabryk, ponieważ ta klasa bazowa nie będzie miała wyraźnego znaczenia semantycznego. Co buduje? Bird s? Car s? Nie są powiązane ... Object s? To nie jest Java!

Jeśli chcesz użyć fabryk (z jakiegoś powodu), to Factory powinien wytworzyć rodzaj obiektów, wszystkie pochodzące ze wspólnej klasy bazowej. Jeśli masz kilka rodzajów obiektów, będziesz potrzebował kilku rodzajów fabryk.

Jeśli uznasz, że kod fabryczny jest powtarzalny, użyj szablonu do podniesienia wspólnego kodu.

0

Jeśli poprawnie odgadłem, problem polega na tym, że nie wiesz, jak przekazać różne zestawy argumentów do metod fabrycznych. Jeśli tak, mogę doradzić ci utworzenie jeszcze jednej hierarchii/nazwijmy ją FactoryHelper. Konkretna klasa tej hierarchii będzie zawierała szczegółowe dane dla instancji twoich konkretnych klas, na przykład FactoryHelperA dla ConcreteProductA będzie zawierać ciąg znaków, a FactoryHelperB dla ProductB będzie zawierać int. Metoda abstact w twojej fabryce musi zaakceptować abstrakcyjną klasę bazową - FactoryHelper jako argument. Konkretne metody w twojej fabryce rzucają ten argument na konkretne FactoryHelperA lub FactoryHelperB i uzyskają konkretne dane do wprowadzenia specyficznego produktu. Jest to niezbyt dobry projekt. Domyślam się, że próbujesz użyć metod fabrycznych w niewłaściwy sposób.