簡體   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