Konstruktor by nemel obsahovat zadnou logiku (prestoze obcas je jednodussi podlehnout lennosti a neco do nej dopsat). Od konstruktoru se ocekava, ze inicializuje objekt, tj. priradi objekty privatnim fieldum a zkontruluje, ze tyto fieldy nejsou null, kdyz byt nemaji. Kdyz se pisou nejdrive testy a teprve pote implementace (napr. TDD), primo vas to k tomu vede. Idealni stav je, kdyz se do kontruktoru skrze rozhrani injektuji konkretni implementace z vnejsku. Sam objekt potom neni zavisly na konkretnich implementacich jednotlivych fieldu. Je to dobry zpusob, jak psat udrzitelny kod.
Situaci, kterou popisujete v prikladu (class A), lze resit takto:
1) interface A - pouze public rozhrani
2) class AbstractA (private, nebo package private - viditelna pouze ve factory)
3) class FactoryA, ktera v ruznych metodach vraci konkretni parametrizace uplne nastavene A.
Vhodnym pojmenovanim metod FactoryA, ktere budou poskytovat plne inicializovane rozhrani A, poskytnete uzivatelum factory prehledny a snadno pouzitelny nastroj pro vytvoreni instanci A. Dana Factory muze skryvat ruzne strategie parametrizace puvodni tridy.
Povzdech: Je skoda, ze se na skolach dodnes neuci technologie programovani. Potrebne zkusenosti clovek ziska az po delsi dobe: praci na legaci kodu, kde nejprve vidi priklady a dusledky spatne psaneho kodu, pote novych projektech, pod vedenim kvalitnich team-leaderu.