单例模式是一种创建型设计模式,其主要特点包括:
缺点
这是一种最简单的单例实现方法.再这种方法中,单例实例再类加载时被创建,因此可以保证在多线程环境下是安全的.
package com.fanqiechaodan.singleton.singleton1;
/**
* @Classname Singleton
* @Description
*/
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton(){
// 私有构造函数
}
public static Singleton getInstance(){
return INSTANCE;
}
}在这种方法中,单例实例在第一次被使用时创建.在多线程环境下,使用双重锁定机制可以确保只有一个实例被创建.
package com.fanqiechaodan.singleton.singleton2;
/**
* @Classname Singleton
* @Description
*/
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的类加载机制,在第一次访问SingletonHolder类时才会加载Singleton实例,这种方法既保证了线程安全,又可以实现懒加载
package com.fanqiechaodan.singleton.singleton3;
/**
* @Classname Singleton
* @Description
*/
public class Singleton {
private Singleton(){
// 私有构造函数
}
public static Singleton getInstance(){
return SingletonHolder.INSTANCE;
}
private static class SingletonHolder{
private static final Singleton INSTANCE = new Singleton();
}
}使用枚举类型可以非常方便的实现线程安全的单例模式.枚举在定义时就被创建了,因此它是线程安全的,并且只有一个实例.
package com.fanqiechaodan.singleton.singleton4;
/**
* @Classname Singleton
* @Description
*/
public class Singleton {
private Singleton() {
// 私有构造函数
}
static enum SingletonEnum {
/**
* 枚举实例
*/
INSTANCE;
private Singleton singleton;
/**
* 私有构造函数,确保只有一个实例
*/
private SingletonEnum() {
singleton = new Singleton();
}
private Singleton getSingleton() {
return singleton;
}
}
/**
* 对外暴露一个获取Singleton对象的静态方法
*
* @return
*/
public static Singleton getInstance() {
return SingletonEnum.INSTANCE.getSingleton();
}
}总体来说,枚举单例模式是一种简单,高效且线程安全的单例实现方式,可以满足大部分单例模式的需求.因此在实际开发中,推荐使用枚举单例模式来实现单例模式.
以上就是Java创建型设计模式之单例模式的详细内容,更多关于Java创建型设计模式之单例模式的资料请关注九品源码其它相关文章!