单例设计模式
作者:互联网
1.单例设计模式是什么
单例设计模式理解很简单,就是一个类只允许创建一个对象,那这个类就叫单例类,这种设计模式就叫作单例设计模式
2.单例的用处
有些数据在系统中只应该保存一分,就比较设计为单例类
3.单例的实现
总的来说单例在java中大致有5种实现模式
1.饿汉式
/**
* 单例设计模式饿汉式
* 定义一个简单得id自增器
*/
public class SingleCaseDemo1 {
private AtomicLong atomicLong = new AtomicLong();
private static final SingleCaseDemo1 singleCase = new SingleCaseDemo1();
private SingleCaseDemo1(){}
public static SingleCaseDemo1 getIdGenerate(){
return singleCase;
}
public Long getId(){
return atomicLong.incrementAndGet();
}
}
2.懒汉式
/**
* 单例设计模式懒汉式
* 定义一个简单得id自增器
*/
public class SingleCaseDemo2 {
private AtomicLong atomicLong = new AtomicLong();
private static SingleCaseDemo2 idGenerate;
private SingleCaseDemo2(){}
//会有性能并发减低
public static synchronized SingleCaseDemo2 getIdGenerate(){
if(null == idGenerate){
idGenerate = new SingleCaseDemo2();
}
return idGenerate;
}
public Long getId(){
return atomicLong.incrementAndGet();
}
}
3.懒汉式解决并发减低问题
/**
* 单例设计模式懒汉式双重检测
* 定义一个简单得id自增器
*/
public class SingleCaseDemo3 {
private AtomicLong atomicLong = new AtomicLong();
//volatile防止低版本jvm进行指令重排
private static volatile SingleCaseDemo3 idGenerate;
private SingleCaseDemo3(){}
public static SingleCaseDemo3 getIdGenerate(){
if(null == idGenerate){
synchronized (SingleCaseDemo3.class){
if(null == idGenerate){
idGenerate = new SingleCaseDemo3();
}
}
}
return idGenerate;
}
public Long getId(){
return atomicLong.incrementAndGet();
}
}
4.静态内部类实现
/**
* 单例设计模式静态内部类
* 定义一个简单得id自增器
*/
public class SingleCaseDemo4 {
private AtomicLong atomicLong = new AtomicLong();
private SingleCaseDemo4(){}
public static class SingleCaseGenerate{
private static final SingleCaseDemo4 idGenerate = new SingleCaseDemo4();
}
public static SingleCaseDemo4 getIdGenerate(){
return SingleCaseGenerate.idGenerate;
}
public Long getId(){
return atomicLong.incrementAndGet();
}
}
5.枚举类实现
/**
* * 单例设计模式,枚举方式
* * 定义一个简单得id自增器
*/
public enum SingleCaseDemo5 {
IdGenerate;
private AtomicLong atomicLong = new AtomicLong();
public Long getId(){
return atomicLong.incrementAndGet();
}
}
标签:private,idGenerate,单例,AtomicLong,设计模式,public 来源: https://www.cnblogs.com/wzy855/p/15176231.html