2017-08-10 43 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