我有一个具有两个不同构造函数的对象:
public class MyClass {
public MyClass(arg1, arg2) {
//constructor
}
public MyClass() {};
}
我只需要通过我的软件的特定类调用第二个(第一个可以在任何地方调用)。是否有专门针对这种情况的设计模式?
MyClass
和调用类位于两个不同的包中,因此包私有(private)构造函数不是解决方案。
最佳答案
如果没有设计模式,它可以用一种方式完成。将一个构造函数设置为 public,它将被所有类调用。另一个声明它是私有(private)的。现在把这个类和特定的放在同一个包中。
public class MyClass {
public MyClass(arg1, arg2) {
//constructor
}
MyClass() {}; // only for the class in the same package
}
所以现在公共(public)构造函数可以从所有类中使用,而包保护构造函数只能由同一包中的类调用。
另一种选择
你可以使用不同的工厂模式实现
public class MyClass {
public MyClass(arg1, arg2) {
//constructor
}
public MyClass() {};
}
和工厂
public class MyClassFactory{
public static MyClass createMyClass(Object o){
if (o instanceOf SpecificClass)
return new MyClass();
else
return new MyClass(arg1,arg2);
}
}
现在调用
MyClass mC = MyclassFactory.createMyClass(this);
N.B.. 我只是省略了参数。您可以在 createMyClass
方法中传递参数。
关于java - 调用构造函数的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17407297/