[英]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.