急切的初始化与懒惰初始化用例



我有一个用户酶,其中有这样的代码:

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因初始化顺序覆盖它们,则在构造函数中调用非私有方法可能是有问题的。

相关内容

  • 没有找到相关文章