【发布时间】:2015-05-28 04:29:23
【问题描述】:
我有一些代码很耗时,你可以把它当作从磁盘加载数据(但绝对不仅如此)。但是我在初始化时只需要这段代码一次,但它完成了,我可以直接快速地使用一些与之相关的方法。
现在我不知道应该把这段代码放在哪里,这是我的想法: 我把它放在某个A类的构造函数中,然后放在B类中,这需要多次调用A中的某个方法,所以我在B的构造函数中创建了一个A的新实例,这非常理想,因为每次我需要A 的方法,我可以直接访问它,A 的构造函数只调用一次。
但是问题来了,我还有一些其他的类C,它生成了很多B实例(new B()),那么每次C生成一个新的B实例,都会调用A的构造函数,又是这样非常耗时,我该如何组织我的代码以避免这种情况?
请参阅代码以进行说明。
class A{
public A(){
some time-consuming code;
}
public void methodInA(){
some method in A;
}
}
class B{
public B(){
A a = new A();
for (i=0; i<10000;i++)
methodInB();
}
public void methodInB(){
methodInA();
}
}
//so far, everything is perfect, but I have another class C
class C{
public C(){
some code;
}
public void methodInC(){
for (i = 0; i<10000; i++)
new B();
}
}
【问题讨论】:
-
就我个人而言,我会将代码放在你可以使用的某个方法中,这样你可以更好地控制何时调用它,但这就是我
-
谢谢,假设我把它们放在方法A中,我只需要调用一次(读取和处理另一个方法A的数据),因为它们很耗时,但我需要调用方法B(需要在不同的地方(类)很多次方法A)的数据,如何避免多次调用方法A? @MadProgrammer
-
有一个类加载和处理数据,但返回数据的结果,您可以从中传递给其他类/方法。有点像工厂模式
-
A 类(或至少其昂贵的磁盘数据)应该被实例化一次。天真地说,您可以使 A 成为单例(或具有静态数据+字段的类),然后 B 不会调用“new A()”而是调用“A.instance()”。说得不那么天真,我会使用 Spring(如果你熟悉 Spring 术语,我会告诉 spring 创建一个类型为“A”的 bean,scope=singleton,并将其注入 B)
-
谢谢@MadProgrammer,您的建议很有帮助,下面的答案显示了一种方法。
标签: java