单列设计模式
单例模式属于创建型模式,通过采用一定的方法,使某个类在整个项目中实例对象只有一个。
1、饿汉式
public class Singleton {
//饿汉式
//1. 提供类的全局静态变量
private static Singleton singleton=new Singleton();
//2. 私有化构造器
private Singleton(){}
//3. 提供获取类的全局变量的静态方法
public static Singleton getSignleton(){
return singleton;
}
}
2、懒汉式(线程不安全)
public class Singleton {
//懒汉式(线程不安全)
//1. 提供类的全局静态变量,不实例化
private static Singleton singleton;
//2. 私有化构造器
private Singleton(){}
//3. 提供获取类的全局静态变量的静态方法
public static Singleton getSingleton(){
if (singleton == null) {
singleton = new Singleton();
return singleton;
}
return singleton;
}
}
3、懒汉式(线程安全)
public class Singleton {
//懒汉式(线程安全)
//1. 提供类的私有全局静态变量,不实例化
private static Singleton singleton;
//2. 私有化构造器
private Singleton(){};
//3. 提供获取类的全局静态变量的静态方法
public static synchronized Singleton getSingleton(){
if (singleton==null){
return singleton = new Singleton();
}
return singleton;
}
}
4、懒汉式(线程安全2)
public class Singleton {
//懒汉式(线程安全)
//1. 提供类的私有全局静态变量,不实例化
private static Singleton singleton;
//2. 私有化构造器
private Singleton(){};
//3. 提供获取类的全局静态变量的静态方法
public static Singleton getSingleton(){
synchronized(Singleton.class){
if (singleton==null){
return singleton = new Singleton();
}
}
return singleton;
}
}
5、双锁模式
public class Singleton {
//双锁模式
private static volatile Singleton singleton;
private Singleton(){}
public static Singleton getSingleton(){
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
return singleton = new Singleton();
}
}
}
return singleton;
}
}