重用对象的最佳方法

时间:2013-12-04 22:48:43

标签: java oop

我一直在查看我的一些课程,似乎每次我需要一个新的输入我都会制作一个新的扫描仪(如果该课程没有扫描仪)。有没有办法在多个类之间重用扫描程序或任何其他对象?

4 个答案:

答案 0 :(得分:4)

过早优化是一件坏事(tm)。 和单身人士一样。

您担心的性能问题往往不是您的程序陷入困境的问题。 因此,只需创建扫描仪并享受可读代码。

如果遇到性能问题,请分析代码。如果事实证明扫​​描程序是性能瓶颈导致您的所有应用程序都创建并丢弃扫描程序,那么现在是时候开始考虑在代码的特定部分重用它们了。

或者更可能的是,用更多低级对象替换它们,比如BufferedReader和Pattern and Matcher。

答案 1 :(得分:0)

也许将它放入Utilities类或类似单身的东西。

答案 2 :(得分:0)

单例模式是实现此目的的一种方法。另一个是实现类似Java字符串内化的东西。您可以维护一组静态的现有扫描仪,只创建一个新的扫描仪(如果它不在集合中)。

答案 3 :(得分:0)

创建多个扫描仪不一定是个问题,除非您希望它们访问同一个文件。 一种选择是创建一个包含静态扫描器或使用单例的util类。

单身就是这样的:

class Singleton 
Singleton singleton 
private Singleton(){
//constructon
}

public synchronised singleton getsingleton(){
   if (singleton==null)
       singleton=new Singleton()
 return singleton 
}

你的另一个选择就是像这样做

class utils {
     public static scanner scan
}

可以使用

访问
utils.scan 

而不是您的普通变量名称。

但是请记住,2个扫描仪的行为与1个扫描仪不同。例如,假设我们有一个文件扫描程序,它位于文件的中间,现在另一个对象读取下一个单词,如果你拆分2个扫描程序,那么origenal将读取相同的单词,但如果你有一个扫描程序,它就不会。例如 2个扫描仪A和B都读取为文本“这是一个例子”

创建
print(A.next())
print(B.next())
print(A.next())
print(B.next())
would give us "this this is is" 
if however we run it with just a single scanner we get 
print(A.next())
print(A.next())
print(A.next())
print(A.next())
which would give us "this is an example" 

请记住,单个扫描仪的行为与2个扫描仪的行为不同,如果您尝试执行多线程操作,这一点尤其值得注意。因此,如果只是尝试保存这些变量名称,您可能不想这样做。