单身人士使用静态成员和方法?

这个问题在这里已经有了答案:

  • 静态类和单例模式之间的区别? 36个答案

  • 您不能使用此模式为某个接口实现提供者,也不能使用子类或其他替代行为。 这意味着测试变得更加困难,并且不能对静态类所做的任何事情使用依赖注入。


    单例是一个类的单个实例(即,一个对象)。 一块静态代码不是一个对象。 这只是代码。

    这似乎有一个明确的区别:

    public class MyClass {
      public static void doIt() {
        System.out.println("doIt()");
      }
    }
    

    和这个:

    public class MySingleton {
      private static MySingleton _singleton = null;
      private String cantTouchThis;
      private MySingleton() {
        cantTouchThis = "Hands off, static block!";
      }
      public static MySingleton newInstance() {
        if (_singleton == null) {
          _singleton = new MySingleton();
        }
        return _singleton;
      }
    }
    

    在第一种情况下,基本上所有的都是可以通过调用MyClass.doIt()来执行的代码块。 在第二种情况下,通过调用MySingleton.newInstance(),您可以实现一个诚实善良的对象。

    HTH


    除了序列化以外,单元测试这样的“单例”是一种潜在的缺点。

    将这与单元测试一个真实的(即可实例化的)单例进行对比。

    最终,单例保证一个类的单个实例,而静态类是不可实例化的,因为@JStevenPerry指出(我希望你已经理解了):尽管它们在很多方面可以被类似地使用,但它们并不相同。

    链接地址: http://www.djcxy.com/p/78821.html

    上一篇: Singleton using Static Members and Methods?

    下一篇: Is a static class a singleton?