Singleton class vs static methods and fields?
本问题已经有最佳答案,请猛点这里访问。
为什么在Android/Java中使用单级类,当使用一个具有静态字段和方法的类来提供相同的功能时?
例如
1 2 3 4 5 6 7 8 9 10 11 | public class StaticClass { private static int foo = 0; public static void setFoo(int f) { foo = f; } public static int getFoo() { return foo; } } |
VS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | public class SingletonClass implements Serializable { private static volatile SingletonClass sSoleInstance; private int foo; //private constructor. private SingletonClass(){ //Prevent form the reflection api. if (sSoleInstance != null){ throw new RuntimeException("Use getInstance() method to get the single instance of this class."); } foo = 0; } public static SingletonClass getInstance() { if (sSoleInstance == null) { //if there is no instance available... create new one synchronized (SingletonClass.class) { if (sSoleInstance == null) sSoleInstance = new SingletonClass(); } } return sSoleInstance; } //Make singleton from serialize and deserialize operation. protected SingletonClass readResolve() { return getInstance(); } public void setFoo(int foo) { this.foo = foo; } public int getFoo() { return foo; } } |
这主要是由于
- 静态类型不能实现接口并从基类派生。
- 从上面我们可以看到静态类型会导致高耦合——您不能在测试和不同环境中使用其他类。
- 不能使用依赖项注入来注入静态类。
- 单件更容易模仿和填隙。
- 单子可以很容易地转换成瞬变。
这是我头脑中的几个原因。这可能不是全部。