我有一个用户酶,其中有这样的代码:
public class Xapp extends App {
private A a;
private B b;
private C c;
public Xapp() {
// do anything
}
@override
public void doStuff() {
try{
do1();
do2();
do3()
} catch(Exception e) {
throw new XappException(msg);
}
}
public void do1() {
a = new A();
a.process();
}
public void do2() {
b = new B();
b.process();
}
public void do3() {
c = new C();
c.process();
}
}
它将从Main内部的Topapp类中调用:(严格要求)
new Xapp.doStuff()
在这里,B的初始化取决于 a 的过程和 c 的初始化,取决于 a a and b b 流程。因此,我正在以迭代方式进行初始化。(懒惰的初始化)。
但是有人告诉我应该严格完成设计,以使每个构造函数( a , b and c )都应在仅XAPP构造函数。(急切的初始化)
我不同意。因为我的代码流在生产者和消费者的方式上是迭代的。通常,当可用资源时,我们会渴望初始化。但是我不能在这里,因为资源将通过t tht tht tht t t t t t t t t t t t t t t t t t c。
进行处理。我发现这种方法是完美的。有设计缺陷吗?
无法在构造函数中进行初始化时的常见模式,是使构造函数私有并具有静态方法返回新的,完全初始化的实例。
public class Xapp extends App {
private A a;
private B b;
private C c;
private Xapp() {
// do anything
}
public static Xapp newInstance() {
Xapp x = new Xapp();
x.doStuff();
return x
}
// snip...
}
当您的课程可以继承时,这特别有用,因为如果SublCass因初始化顺序覆盖它们,则在构造函数中调用非私有方法可能是有问题的。