2017-08-10 39 views
0

實例化合適的班級,我想知道是否有可能做我想做的。 我有一個區域值,並根據它的價值,我想只有在父類的構造自動實例合適的班級。根據地區不同,價值

例如:我想做到這一點

void aMethod() 
{ 
    doSomethings(); 
} 

void doSomethings() 
{ 
    Parent parent = new Parent(); 
    parent.callMethod(); 
} 

以及基於語言環境,例如Locale.France。當我調用新的Parent()時,我希望ChildFR被實例化。

請讓我知道,如果我是不夠清楚,或者如果可能的話與Java。每個想法都是受歡迎的

+0

你是不是清楚,哪裏是價值?你可能需要一個如果信任。 – arkantos

+0

基於Locale,例如Locale.France。我想要ChildFR被實例化 – BlueTux

+0

你不能那樣做。 'new Foo()'將總是實例化一個新的'Foo'。但是你可以通過添加靜態'createFoo()'方法,着眼於當前的語言環境,並確實增加了一個抽象層是'新的Foo()'或'新FrenchFoo()'... –

回答

0

你可能想看看工廠模式或生成器模式(其主要目標不是與多態性幫助,但可能這樣做)。

他們不會做你想做的事情,通過調用父構造函數來實例化一個孩子,但他們是你想要完成的事情的解決方案(相對於某些狀態或配置實例化)。

對於這兩種模式,您需要定義您的實現的抽象(如父母)和抽象的具體實現(例如,您的孩子喜歡ChildFR)。然後將實例化作業委託給Factory或Builder,它將相對於您的變量返回一個具體實現的實例。

你有你的工廠方法的簽名和匹配調用,比如:

// return instance relatively to value of locality parameter 
CustomFactory.create(String locality) : Parent 

Parent parent = (new CustomFactory()).create(var); 

或您的構建器方法簽名和匹配調用,比如:

// set locality 
CustomBuilder.locatility(String locality) : CustomBuilder 
// return instance relatively to value of locatily parameter 
CustomBuilder.build() : Parent 

Parent parent = (new CustomBuilder()).locality(var).build(); 
+0

謝謝您的回答。我剛剛看了一下Builder模式,我認爲它可以做我想做的事情(一個可以實例化工作的類,而不是「If」語句!)。我會嘗試 ! – BlueTux