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

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

嗨,我不清楚得到单身类和静态类之间的区别是什么? 有没有人可以用例子来说明这一点?


SO上的旧que / ans:静态类和单例模式之间的区别?

一个静态类只有静态方法,对此,一个更好的词将是“功能”。 体现在静态类中的设计风格纯粹是程序性的。

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


Singleton Class :Singleton Class是每个类加载器只能存在单个实例的类。

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

以下内容从本博客中引用“ 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模式非常有用。 对于我的助手类,我们并不想实例化类的任何副本。 你不应该使用Singleton类的原因是因为对于这个帮助类我们不使用任何变量。 如果单例类包含一组变量,我们只需要一组变量,并且方法使用这些变量,但是在我们的帮助类中,除了传入的变量(我们做最后的)之外,我们不使用任何变量, 。 出于这个原因,我不相信我们想要一个单例实例,因为我们不需要任何变量,我们也不希望任何人实例化这个类。 所以如果你不想让任何人实例化这个类,通常如果你有某种helper / utils类,那么我使用我所说的静态类,一个带有私有构造函数的类,并且只包含静态方法任何变量。

同样的答案也在我的答案中引用


区别不是要问的正确方法。因为与静态相比,单身不是关键字。 你应该问“如何选择哪一个?”。 单身类与静态类相比有什么优势,这些问题出现在设计阶段。

Singleton:用法:用作全局配置的类,例如:带有一个数据库连接的软件的试用版,每个jvm的JDK运行时类实例。

何时开始:1.在开发代码时,您会考虑向前兼容性,就像明天当您需要将此单例类转换为常规类或允许子类一样。 2.当这个单例类很重时,你可以提供延迟加载功能。

静态:用法:基本上做转换的类,实用程序函数。 请检查数学课程。

何时去:1.助手类,由你的API开发中的所有类使用。

缺点:1.班级热切期待。

期待别人的分数。

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

上一篇: Difference between singleton class and static class?

下一篇: What does the 'static' keyword do in a class?