我有一个带有两个构造函数的类。
Class Sample{
private ClassOne classOne;
private ClassTwo classTwo;
private ClassThree classThree;
public Sample(){
classOne = new ClassOne();
classTwo = new ClassTwo();
classThree = new ClassThree();
}
public Sample(int id){
classOne = new ClassOne(id);
classTwo = new ClassTwo(id);
classThree = new ClassThree(id);
}
//some code here
}
有一个包含两个构造函数的 Sample 类。需要在示例类中实例化另外三个类(ClassOne、ClassTwo 和 ClassThree)。所有三个类都包含默认和参数化构造函数。如果调用 Sample 类的默认构造函数,则应调用 ClassOne、ClassTwo 和 ClassThree 的默认构造函数。 如果调用 Samples 参数化构造函数,则调用 ClassOne、ClassTwo 和 ClassThree 的参数化构造函数。
我在上面写了代码。有什么优雅的方法可以做到这一点吗?
最佳答案
假设您的 Sample
类中的 id
没有其他用途,您可以使用工厂方法模式:
class Sample {
private ClassOne classOne;
private ClassTwo classTwo;
private ClassThree classThree;
Sample(ClassOne classOne, ClassTwo classTwo, ClassThree classThree) {
this.classOne = classOne;
this.classTwo = classTwo;
this.classThree = classThree;
}
public static Sample factory(int id) {
ClassOne classOne = null;
ClassTwo classTwo = null;
ClassThree classThree = null;
if ( id == -1 ) {
classOne = new ClassOne();
classTwo = new ClassTwo();
classThree = new ClassThree();
}
else {
classOne = new ClassOne(id);
classTwo = new ClassTwo(id);
classThree = new ClassThree(id);
}
return new Sample(classOne, classTwo, classThree);
}
}
您的具体示例在其原始表述中可能更清晰,但这是将复杂的构造逻辑从构造函数中移出的好方法。
关于java - 调用类的参数化/默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16832996/