繁体   English   中英

初始化对象的最佳方法是什么

[英]What is the best approach for initialize object

我有一个关于对象初始化的基本问题。 更新SomeClass只是其他类。 Foo类只使用someClass的方法。 例如:使用DAO对象(SomeClass)方法的Controller(Foo)。

什么是最好的方法?

1方法 - 使用构造函数

 public class Foo{

      private SomeClass someClass;

      public Foo()
      {
         someClass=new SomeClass();
      }
      public void method1(){//uses someClass}
      public void method2(){//uses someClass}
  }

2方法 - 每种方法的初始化

      public class Foo{

       public void method1(){SomeClass someClass = new SomeClass();}
       public void method2(){SomeClass someClass = new SomeClass();}
  }

3方法 - 没有构造函数的初始化

       public class Foo{

        private SomeClass someClass=new SomeClass();

        public void method1(){//uses someClass}
        public void method2(){//uses someClass}
 }

你的问题的答案实际上取决于SomeClass如何工作,以及你想要它做什么。

方法1:在构造函数中创建对象实例。

  • 优点:您可以在不同的构造函数中创建不同的实例。 您可以在Foo的所有方法中使用相同的实例。
  • 缺点:您可能不希望在Foo的所有方法中使用相同的实例。

方法2:在方法中创建对象实例。

  • 优点:您可以在一个方法中使用许多不同的SomeClass实例。
  • 缺点:您必须多次实例化SomeClass。 这可能很昂贵,具体取决于SomeClass的功能。

方法3:在属性声明中创建对象实例。

  • 优点:尽管调用了哪个构造函数,但是在Foo的所有方法中都获得相同的实例(除非您覆盖该值)。

  • 缺点:如果方法更改了SomeClass的状态,如果您在设计中没有考虑到这一点,则可能会导致问题。

方法4:依赖注入。 将SomeClass的实例注入到Foo的构造函数中。

  • 优点:您可以指定在运行时使用的SomeClass实例。
  • 缺点:调用代码需要提供一个实例,根据您要完成的操作,这可能是不必要的。

     private mySomeClass; public Foo(SomeClass mySomeClass) { this.mySomeClass = mySomeClass; } public void method1(){ if(mySomeClass != null) mySomeClass.runSomething(); } 

这取决于您要对初始化对象执行的操作:

  • 对于原型,请在方法中初始化
  • 对于一对一的关系,做一个组合
  • 对于多对一创建单个对象(隐藏SomeClass的构造函数 - 使其成为私有)并使用SomeClass.getSingleton()等方法获取所有相关类的对象

请注意,上述每种情况都会在多线程中产生影响

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM