我有一个单身人士课程。
当访问课程的方法时,我可以选择两种可能性。
例如:
Class Test{
private int field1;
Test instance;
private Test(){};
private Test getInstance(){
if (instance == null)
instance = new Test();
return instance;
}
public int method1() { return field1;}
public static int method2() {return getInstance().field1;}
}
现在,我可以写其他地方
int x = Test.getInstance().method1();
int y = Test.method2();
哪个更好? 我可以想到第三种方法,我在静态方法中直接使用“instance”,然后捕获异常,如果它是null并实例化它然后重新调用它自己。
理论上,我可以让整个静止。 但是,这会在将状态保存在活动结束时产生问题,因为序列化不会保存静态。答案 0 :(得分:2)
你应该避免让一切都变得静止。有些人甚至会说单身人士没有完成。
答案 1 :(得分:2)
我认为第一个更清洁。
但是,请记住,在某些极端情况下,Android可能会杀死您的静态实例。请参阅此示例:http://code.google.com/p/acra/。
我找到的解决方法是在Application类中保留对单例的引用。不过,我不知道这是多么容易出问题。
答案 2 :(得分:2)
单例模式的重点是您可以更改实现。在大多数情况下,您可以使用它来保持在此功能的某些其他实现中“挂钩”的可能性。
阅读:在决定采用setInstance
方法的单身人士计划时,不仅仅是getInstance
。 - 如果这没有意义,只需使用普通的静态类。
另一方面,单身人士已经过时了,如果你想成为时髦的话。搜索“消除全局状态”。有一些谷歌赞助的谈话也是如此。简而言之:您的代码将更易于测试并帮助您避免一些依赖性混乱。 (除了嘻哈之外,它绝对是向正确方向迈出的一步)。
答案 3 :(得分:0)
我个人认为静态方法首先是糟糕的设计。当然,它取决于程序本身,但允许类具有静态方法将对整个设计产生影响。我的陈述背后的一些推理:
所以,如果可以的话 - 避免它。
如果出于任何原因,你会坚持使用静态方法,我猜第一个解决方案更好。这就是单身人应该如何工作的。您应该通过静态方法获得对 SINGLETON OBJECT 的引用,但是此对象应该然后根据面向对象编程中的所有原则使用。