单例模式:确保某个类只有一个唯一的实例。
构造形式: 创建一个全局变量对象(可以不实例化)
把构造器私有化
静态方法把全局变量实例化,并返回
1.最常用的形式
public class Singleton {
private static Singleton instance = null;
private Singleton(){
}
public static Singleton getInstance(){
if(instance==null){
instance = new Singleton();
}
return instance;
}
}
//这个在涉及到线程的时候不一定生成一个对象了。--》 我们想到了同步synchornized
2.同步形式(懒汉式)
public class Singleton {
private static Singleton instance = null;
private Singleton(){
}
synchronized public static Singleton getInstance(){
if(instance==null){
instance = new Singleton();
}
return instance;
}
}
//synchronized是很影响性能的,然而单例模式我们只要在第一次调用的时候才需要同步。--》有了双重锁的形式
3.双重锁
public class Singleton {
private static Singleton instance = null;
private Singleton(){
}
public static Singleton getInstance(){
if(instance==null){
synchornized(Singleton.class){
if(null == instance){
instance = new Singleton();
}
}
}
return instance;
}
}
//这样只有在第一次调用的时候进行同步。
4.饿汉式
public class Singleton {
private static Singleton instance=new Singleton();
private Singleton(){}
static Singleton getInstance() {
return instance;
}
}
//在自己内部定义自己的一个实例,只供内部调用
例如:读取配置文件的工具类应用到单例模式。