单例类和静态类之间的区别?

2022-09-01 14:14:43

可能的重复项:
静态类和单例模式之间的区别?
在 Java 中,单例模式和静态类之间有什么区别?

嗨,我没有清楚地得到单例类和静态类之间的区别是什么?任何人都可以用例子来详细说明吗?


答案 1

单例类:单例类是每个类装入器只能存在单个实例的类。

静态/帮助器类(仅具有静态字段/方法的类):不存在此类的实例。只有字段和方法可以作为常量或帮助器方法直接访问。

下面引用了这个博客“Java中的静态类很好地描述了它。该博客还提供了解释相同内容的示例:

单例示例:

public class ClassicSingleton {
    private static ClassicSingleton instance = null;

    private ClassicSingleton() {
        // Exists only to defeat instantiation.
    }

    public static ClassicSingleton getInstance() {
        if (instance == null) {
            instance = new ClassicSingleton();
        }
        return instance;
    }
}

静态类示例:

/**
 * A helper class with useful static utility functions.
 */
public final class ActionHelper {

    /**
     * private constructor to stop people instantiating it.
     */
    private ActionHelper() {
        // this is never run
    }

    /**
     * prints hello world and then the users name
     * 
     * @param users
     *            name
     */
    public static void printHelloWorld(final String name) {
        System.out.println("Hello World its " + name);
    }

}

那么这两个示例之间有什么区别,以及为什么我认为第二种解决方案对于您不希望或不需要实例化的类更好。首先,如果要创建类的一个实例,单例模式非常有用。对于我的帮助器类,我们真的不想实例化该类的任何副本。不应使用 Singleton 类的原因是,对于此帮助程序类,我们不使用任何变量。如果单例类包含一组我们只需要一组变量并且方法使用这些变量,那么它将非常有用,但是在我们的帮助器类中,除了传入的变量(我们将其设置为 final)之外,我们不使用任何变量。出于这个原因,我不相信我们想要一个单例实例,因为我们不需要任何变量,我们不希望任何人实例化这个类。因此,如果您不希望任何人实例化该类,这通常是如果您有某种帮助器/utils类,那么我使用我所说的静态类,这是一个具有私有构造函数的类,仅由静态方法组成,没有任何变量。

同样的答案也从我的答案中引用在这里


答案 2

关于SO的旧问题:静态类和单例模式之间的区别?

静态类是一个只有静态方法的类,对于它来说,更好的词是“函数”。静态类中体现的设计风格纯粹是过程性的。

另一方面,Singleton是特定于OO设计的模式。它是一个对象的实例(具有其中固有的所有可能性,例如多态性),其创建过程可确保该特定角色的整个生命周期中只有一个实例。


推荐