单例模式很常见,多用于配置类,资源加载类中,下面我们来看4种单例模式(很精髓)都是现场安全的
饿汉式单例模式
package com.wwj.singletonmode;
/**
* 饿汉式获取单例 线程安全 生产推荐用
*/
public class Single1 {
private static final Single1 single1 = new Single1();
//私有构造器
private Single1(){}
//提供获取实例的方法
public static Single1 getIntance(){
return single1;
}
public void doSthing(){
System.out.println("业务代码");
}
}
常规懒汉式单例模式
package com.wwj.singletonmode;
/**
* 懒汉式获取单例 线程安全
*/
public class Single2 {
private static Single2 single2;
//私有构造器
private Single2(){}
//提供获取实例的方法
public static Single2 getIntance(){
if(single2 == null){
synchronized (Single2.class){
if (single2 == null) {
single2 = new Single2();
}
}
}
return single2;
}
public void doSthing(){
System.out.println("业务代码");
}
}
内部类懒汉式单例模式
package com.wwj.singletonmode;
/**
* 内部类获取单例 线程安全
*/
public class Single3 {
private static class Mg{
private static final Single3 single3 = new Single3();
}
//私有构造器
private Single3(){}
//提供获取实例的方法
public static Single3 getIntance(){
return Mg.single3;
}
public void doSthing(){
System.out.println("业务代码");
}
}
枚举类懒汉式单例模式
package com.wwj.singletonmode;
/**
* 利用枚举获取单例 线程安全简单
*/
public enum Single4 {
INTANCE;
public void doSthing(){
System.out.println("业务代码");
}
}
在具体的环境选择合适的设计模式,设计模式是为项目服务的,不要本末倒置