我有一个关于对象初始化的基本问题。 更新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}
}
答案 0 :(得分:2)
你问题的答案实际上取决于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();
}
答案 1 :(得分:0)
这取决于你想用初始化对象做什么:
SomeClass
的构造函数 - 使其成为私有)并使用类似SomeClass.getSingleton()
<的方法获取所有相关类的对象/ LI>
请注意,上述每种情况都会在多线程期间产生影响