单例模式是保证只有一个实例
优点:全局只有一个实例,便于统一控制,同时减少了系统资源开销
缺点:没有抽象层,扩展起来很困难
懒汉式单例
懒汉式线程–线程不安全单例【因为比较懒所以用到的时候才去创建】
public class LazySingleton02 {
private static LazySingleton02 lazySingleton;
public LazySingleton02(){}
public static LazySingleton02 getLazySingleton() {
if (lazySingleton == null){
lazySingleton = new LazySingleton02();
}
return lazySingleton;
}
}
懒汉式单例–线程安全单例
public class LazySingleton01 {
private static LazySingleton01 lazySingleton;
public LazySingleton01(){}
public static synchronized LazySingleton01 getInstance(){
if (lazySingleton == null){
new LazySingleton01();
}
return lazySingleton;
}
}
饿汉式单例 【因为比较饿所以一上来就直接创建】
public class LazySingleton03 {
private static LazySingleton03 singleton03 = new LazySingleton03();
public LazySingleton03(){}
public static LazySingleton03 getInstance(){
return singleton03;
}
}
DCL双重校验式的单例【线程安全】
public class DCLSingleton {
private static DCLSingleton singleton ;
public DCLSingleton(){}
public static DCLSingleton getInatance(){
if (singleton == null){
synchronized (DCLSingleton.class){
if (singleton == null){
singleton = new DCLSingleton();
}
}
}
return singleton;
}
}