![](/img/trans.png)
[英]What is difference between using singleton class and class with static methods?
[英]What is the difference between Enum and a singleton class
我发现 Enum 和 Singleton 类之间的区别很少,但并不完全相信 Enum 是否可以代替 Singleton 使用。
如果可以使用,那么定义单例类有什么必要呢?
枚举可确保您拥有一组预定义的实例,并且无法创建更多实例。
单例确保您只有一个实例。
从这个意义上说,您可以将 Singleton 描绘为只有一个元素的枚举。
但是枚举和单例(或一般的类)之间存在更多差异(技术和设计角度)。
正如您问为什么甚至使用单例而不是枚举:一个原因可能是单例可以“延迟加载”,而枚举则不能。
枚举: Java 中的枚举是一种包含一组固定常量的数据类型。 Java 枚举常量是静态的,并且是隐式的。 它从 JDK 1.5 开始可用。 要创建枚举,请使用 enum 关键字(而不是类或接口),并用逗号分隔常量。 枚举声明可以在类外部或类内部完成,但不能在方法内部完成。
根据Java命名约定,建议我们将常量命名为全大写
// A simple enum example where enum is declared
// outside any class (Note enum keyword instead of
// class keyword)
enum Color
{
RED, GREEN, BLUE;
}
public class Test
{
// Driver method
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
}
}
////////////////////////////////////////////////// ///////////////
SingletonClass:在面向对象编程中,单例类是一次只能有一个对象(类的一个实例)的类。 第一次之后,如果我们尝试实例化 Singleton 类,新变量也指向创建的第一个实例。
public class Singleton {
private static Singleton singleton = new Singleton( );
/* A private Constructor prevents any other
* class from instantiating.
*/
private Singleton() { }
/* Static 'instance' method */
public static Singleton getInstance( ) {
return singleton;
}
/* Other methods protected by singleton-ness */
protected static void demoMethod( ) {
System.out.println("demoMethod for singleton");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.