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

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

我不明白得到单例类和静态类有什么区别? 任何人都可以举例说明吗?

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

静态/帮助程序类(仅包含静态字段/方法的类) :不存在此类的实例。 只能将字段和方法作为常量或辅助方法直接访问。

以下是从这篇博客中引用的“ 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类,那么我使用我称之为静态类的类,一个带有私有构造函数的类,并且只包含静态方法而没有任何类任何变量。

我的答案也引用了相同的答案

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

静态类是仅具有静态方法的类,对于该类,更好的单词将是“函数”。 静态类中体现的设计风格纯粹是程序性的。

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

差异不是正确的问题。因为与静态相比,单身人士不是关键词。 你应该问“何时选择哪一个?”。 单例类比静态类有什么优势,这些问题出现在设计阶段。

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

什么时候去:1。在开发代码时,你会想到前向兼容性,就像明天需要将这个单例类转换为普通类或允许子类化一样。 2.当这个单例类很重时,你可以提供延迟加载function。

static:用法:基本上执行转换,实用程序function的类。 请检查数学课程。

什么时候去:1。辅助类,由api开发中的所有类使用。

缺点:1。课程急切负荷。

期待别人的积分。

这是模式与模式实现方式之间的区别。

Singleton模式与Java语言无关。 根据您使用的语言,可能有不同的方法将类编成单例。 许多OO语言使用等效的静态变量来制作单例,但其他语言可能使用不同的技术。

另外,实现单例的一些方法比其他方法更好。 实现Singleton的一个好方法是通过工厂方法正确封装对Singleton的访问:

 public class Example { private static final Example SINGLETON = new Example(); public static Example getInstance() { return SINGLETON; } private Example() { /* Constructor */ } } 

使用这种技术,你可以做各种复杂的事情:懒惰加载单例,用一些子类替换它,通过配置管理单例初始化,等等。

Singleton不是类的类型,而是设计模式。 使用Singleton (尝试)保证,在单个Java虚拟机中只构建某个类的一个实例。 顺便提一下,单例模式的现代实现使用枚举。 较旧的实现使用私有构造函数并将对单个实例的引用存储在静态字段中。

静态类始终是一个成员类,与内部类相比,它无法访问周围类的实例变量。


静态类示例

 public class A { public static class B { } public int notAccessibleForB; public static int accessibleForB; } 

单身模式(简约旧式)

 public final class Singleton { public final static Singleton INSTANCE = new Singleton(); private Singleton(){} } 

单身模式(简约现代风格)

 public enum Singleton { INSTANCE; }