今天学习并分享第一种模式,单例模式
单例模式的三种形式:
- 饿汉式
- 懒汉式
- 双重锁模式
接下来讲解第一种,由于我在代码里面都已经解析了, 就不继续啰嗦了
- 饿汉式:由于会new多个,所以用得较少
public class Singleton1 {
/**
* 饿汉式:需要的时候就new
* */
//提供一个内部实例
public static final Singleton1 instance = new Singleton1();
private Singleton1(){}
//提供静态外部调用方法
public static Singleton1 getInstance(){
return instance;
}
}
- 懒汉式 :较为常用
public class Singleton2 {
/**
* 懒汉式:比较常用的模式
* */
private static Singleton2 instance;
private static synchronized Singleton2 getInstance(){
if(instance == null){
instance = new Singleton2();
return instance;
}
return instance;
}
}
- 双重锁模式:比懒汉式少点
public class Singleton3 {
private volatile static Singleton3 instance = null;
private Singleton3() {
}
/**
* 提供外部调用方法获取实例,通过双重if判断,避免多次同步,只获取第一次对象的时候才同步
* 优点:防止其他对象实例化其自己的 Singleton3 对象的副本,确保唯一性
* 弊端:多了一层判断实例,增大了开销
* */
public static Singleton3 getInstance() {
if (instance == null) {
synchronized (Singleton3.class) {
if (instance == null) {
instance = new Singleton3();
}
}
}
return instance;
}
}
最后贴上我的代码