Inicializace objektu s odkazy bez přístupu k non-výchozí konstruktor

hlasů
0

Předpokládejme, že mám rozhraní s názvem „Controller“. Několik tříd implementovat toto rozhraní, a já nevím, tyto třídy (například názvy tříd jsou umístěny v jazyce XML souboru). Právě pro tento Controller-prováděcí tříd pro práci mají získat nějaké odkazy na jiné objekty (možná datových objektů). A to je moje otázka, a to, co je nejlepší způsob, jak inicializovat takové předměty (kontroléru z nich)?

Myslel jsem, že z několika řešení, ale nejsem si úplně jistý, co je nejlepší přístup zde.

Za prvé : Při spouštění objekt z názvu třídy jsem mohl hledat pro „zvláštní“ montážního závodu (přes odraz), který má odkazy objektu, který potřeb Controller-objektů. Ale z toho, co jsem četl v jiných otázkách je to méně pravděpodobné, že dobré řešení, protože bych nutit speciální konstruktor existovat ve třídě. A někdy jsem četl, že odraz je obecně zlo a je lépe se vyhnout.

Druhá : I přidat speciální init (a, b, c) -method k řadiči rozhraní, která by musela být volán přímo po vytvoření objektu. To by vynutit posloupnost volání (první init (..), pak odpočívat) k objektu, aby to funguje, což je příliš pravděpodobné, že špatné. Btw, je init () - Metody generelly špatnou věc v rozhraní?

Za třetí : Po přečtení této poznámky jsem přemýšlel o následující: Místo toho, aby název třídy třídy, kterou se zavádí Controller-rozhraní (v XML souboru) Nemám název třídy továrny, které patří ke konkrétnímu Controller třídy. A tento závod bude implementovat rozhraní s metodou createController (a, b, c) a továrna pak bude vědět, která třída by musela vytvořit instanci a také který konstruktor volat přenést na ostatní odkazy (jako datové objekty). Nevýhodou by to být další třídou jen instanci Controller třídu a jeden možná trochu režii obecně.

Co myslíte, že je nejlepší způsob, jak to udělat? Nebo si můžete myslet na něco jiného, ​​které by mohly být lepší, než tyto tři způsoby?

Dík!

Položena 25/05/2009 v 17:54
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
4

Přístupů jste zmínil, tak bych vyzvednout druhý (jedna továrna-based). Nicméně, protože to, co děláte , je to forma injekce závislost, také zvážit Guice, http://code.google.com/p/google-guice/ - to může umožnit automatizaci hodně práce.

Odpovězeno 25/05/2009 v 18:04
zdroj uživatelem

hlasů
2

Co se snažíte udělat, je velmi podobný tomu, co jaro dělá. Ve vašem XML souboru, váš uzel regulátor bude mít podřízené uzly k určení vlastností, které mají být nastaveny. Řadič je instatiated voláním výchozí konstruktor. Potom vlastnosti se nastavují pomocí odrazu.

Odpovězeno 25/05/2009 v 18:40
zdroj uživatelem

hlasů
0

Další možností by mohlo být použití Unsafe.allocateInstance (třída) k vytvoření instance bez volání konstruktor. Můžete nastavit pole pomocí odrazů.

To předpokládá, že vaše konstruktory nemají žádné vedlejší účinky.

Odpovězeno 25/05/2009 v 19:46
zdroj uživatelem

hlasů
0

V něčem podobném v jiném jazyce, už jsem byl známý použití roztoku init ().

Odpovězeno 25/05/2009 v 18:25
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more