java 创建单例模式的几种方式
单例模式是一种常见的设计模式,它保证在整个应用程序中只有一个特定的实例被创建并且只能访问它。
Java中有许多种创建单例模式的方法。
第一种创建单例模式的方法:使用静态变量
单例模式的几种实现方式 这是最常用的方法之一。创建一个私有的、静态的单例实例变量,在类的构造函数中,确保只创建一个实例。然后,为了访问这个单例,可以使用一个公共的静态方法getInstance()。当getInstance()被调用的时候,返回单例实例。
代码如下:
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
第二种创建单例模式的方法:使用双重检查锁定
在第一种方法中,即使实例已经创建,getInstance()方法每次都要锁定静态的实例对象,这会影响程序的性能。因此,使用双重检查锁定,在第一次创建实例的时候加上同步锁,以后就不需要再加锁了。
代码如下:
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
第三种创建单例模式的方法:使用静态内部类
这种方法也是一种常见的方法,并且也是线程安全的。它使用了Java的类加载机制,只有在需要使用单例的时候才会加载内部类,并创建实例。这种方法不需要使用synchronized,所以效率更高。
代码如下:
public class Singleton {
private Singleton() {}
private static class SingletonInstance {
private static final Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonInstance.instance;
}
}
第四种创建单例模式的方法:使用枚举
这种方法也是线程安全的,并且可以避免反序列化导致的新实例创建。枚举的构造函数只会被加载一次,所以这个实例也只会创建一次。
代码如下:
public enum Singleton {
INSTANCE;
public void doSomething() {
//do something
}
}
以上就是常见的创建单例模式的四种方法。每一种方法都有自己的优点和缺点,应该根据实际情况选择最合适的方法来创建单例。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论