单例模式定义:保证一个类只有一个实例,并提供一个访问它的全局访问点。
创建单例模式的几种方法:
1、饿汉式
顾名思义就是“很懒”,我不管你用不用,一上来就创建对象。
代码如下:
/**
* “饿汉式”:是在不管你用的用不上,一开始就建立这个单例对象
*/
public class SingletonManagerHungry {
//产生唯一静态私有的实例化对象
private static SingletonManagerHungry instance = new SingletonManagerHungry();
//私有化构造函数
private SingletonManagerHungry() {
}
//提供对外的静态方法获取唯一的实例
public static SingletonManagerHungry getInstance() {
return instance;
}
}
2、懒汉式
顾名思义,我“很懒”,用的时候我才创建。
代码如下:
public class SingletonManagerLazy {
private static SingletonManagerLazy singletonManagerLazy = null;
//私有化构造函数
private SingletonManagerLazy() {
}
public static SingletonManagerLazy getInstance() {
if(singletonManagerLazy == null) {
singletonManagerLazy = new SingletonManagerLazy();
}
return singletonManagerLazy;
}
}
3、单例模式的多线程安全双重检查写法
如果在多线程情况下,同时创建对象,如何保证只创建一个对象?
代码如下:
public class SingletonManagerLazy {
private static SingletonManagerLazy singletonManagerLazy = null;
//私有化构造函数
private SingletonManagerLazy() {
}
public static SingletonManagerLazy getInstance() {
//先检查实例是否存在,如果不存在才进入下面的同步块
if(singletonManagerLazy == null) {
//同步块,线程安全的创建实例
synchronized (SingletonManagerLazy.class) {
//再次检查实例是否存在,如果不存在才真的创建实例
if(singletonManagerLazy == null) {
singletonManagerLazy = new SingletonManagerLazy();
}
}
}
return singletonManagerLazy;
}
}