[英]What is the best approach for initialize object
我有一個關於對象初始化的基本問題。 更新SomeClass只是其他類。 Foo類只使用someClass的方法。 例如:使用DAO對象(SomeClass)方法的Controller(Foo)。
什么是最好的方法?
public class Foo{
private SomeClass someClass;
public Foo()
{
someClass=new SomeClass();
}
public void method1(){//uses someClass}
public void method2(){//uses someClass}
}
public class Foo{
public void method1(){SomeClass someClass = new SomeClass();}
public void method2(){SomeClass someClass = new SomeClass();}
}
public class Foo{
private SomeClass someClass=new SomeClass();
public void method1(){//uses someClass}
public void method2(){//uses someClass}
}
你的問題的答案實際上取決於SomeClass如何工作,以及你想要它做什么。
方法1:在構造函數中創建對象實例。
方法2:在方法中創建對象實例。
方法3:在屬性聲明中創建對象實例。
優點:盡管調用了哪個構造函數,但是在Foo的所有方法中都獲得相同的實例(除非您覆蓋該值)。
缺點:如果方法更改了SomeClass的狀態,如果您在設計中沒有考慮到這一點,則可能會導致問題。
方法4:依賴注入。 將SomeClass的實例注入到Foo的構造函數中。
缺點:調用代碼需要提供一個實例,根據您要完成的操作,這可能是不必要的。
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.