暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

单例模式只有饿汉式和懒汉式吗?这几种单例模式你见过吗

凯哥java 2021-09-23
204


设计模式之单例模式-单例模式的几种实现方式及小案例


本文出处:凯哥Java(kaigejava)

单例模式有几种?饿汉式、懒汉式。这两种是最常见的。还有几种是对其扩展的。具体如下:

我们可以从上图看到,共有六种方式。

其中在懒汉式基础上扩展的有两种。即:加锁的懒汉式及双重判断加锁的懒汉式

还有一种是使用内部类实现的。即:内部静态类的

最后一种是比较少见的。使用枚举的。

我们来看看每种方式代码都怎么写。

懒汉式:

我们来看看懒汉式优缺点:

饿汉式:

饿汉式的优缺点及适用场景:

加锁的懒汉式:

public class SingletonThree {
private static SingletonThree singletonThree = null;

private SingletonThree (){}

/**
* 懒汉式同步锁获取方式
* 就是在懒汉式中添加了锁对象
* @return
*/
public static SingletonThree getInstance(){
synchronized (SingletonThree.class){
if(null == singletonThree){
singletonThree = new SingletonThree();
}
}
return singletonThree;
}
}


再来看看加锁懒汉式的由来:

双重判断加锁的懒汉式:

有了加锁的懒汉为什么还会有加锁双重判断的呢?这种由什么优缺点呢?请看下图:

内部静态类是实现的懒汉式:

public class InnerClassSingleton {

private InnerClassSingleton (){}

/**
* 内部静态类
*/
private static class InnerClassSingletonInstance{
private static final InnerClassSingleton instance = new InnerClassSingleton();
}

/**
* 内部静态类获取
* @return
*/
public static InnerClassSingleton getInstance(){
return InnerClassSingletonInstance.instance;
}
}


这种模式的有缺:

使用枚举:

优点缺点:

我们使用单例模式做个小案例。

文章转载自凯哥java,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论