欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 单例模式--懒汉 饿汉模式

单例模式--懒汉 饿汉模式

2025/4/18 20:24:31 来源:https://blog.csdn.net/a15670247200/article/details/144299741  浏览:    关键词:单例模式--懒汉 饿汉模式

一.啥是单例模式?

先介绍一下设计模式:  

设计模式好⽐象棋中的 "棋谱". 红⽅当头炮, ⿊⽅⻢来跳. 针对红⽅的⼀些⾛法, ⿊⽅应招的时候有⼀些固定的套路. 按照套路来⾛局势就不会吃亏.
软件开发中也有很多常⻅的 "问题场景". 针对这些问题场景, ⼤佬们总结出了⼀些固定的套路. 按照这个套路来实现代码, 也不会吃亏.

单例模式能保证某个类在程序中只存在唯⼀⼀份实例, ⽽不会创建出多个实例. 

  

这种情况就存在了两份实例 

单例模式具体的实现⽅式有很多. 最常⻅的是 "饿汉" 和 "懒汉" 两种 

二.饿汉模式 

实现步骤:

1.要实现单例模式,只需要定义一个静态全局变量,这样就可以保证变量全局唯一。

private static Singleton instance= new Singleton();

 private:保证这个变量不可修改。

static:保证全局唯一

2.构造方法私有化

private Singleton() {}

 这样就保证了外界无法通过构造方法创建对象

3.将获取instance的方法用static修饰,使其可以通过类.方法名调用。

public static Singleton getInstance() {return instance;}
public class Singleton {private static Singleton instance= new Singleton();//构造方法私有化private Singleton() {}public static Singleton getInstance() {return instance;}
}

 这种在类加载时就完成初始化对象的模式称为“饿汉模式”。

三.懒汉模式

1.只声明全局变量,不初始化

​​​​​​​private static Singleton_02 instance = null;

2.获取instance时进行if判断,为null再初始化

public static Singleton_02 getInstance() {if(instance == null) {instance = new Singleton_02();}return instance;}

private static Singleton_02 instance = null;private Singleton_02() {}public static Singleton_02 getInstance() {if(instance == null) {instance = new Singleton_02();}return instance;}

这样创建在单线程运行没问题

但在多线程模式下:

这里暂停1s是为了让线程全部进入if语句 

可能会出现问题

因此,要解决这个线程问题,使用新学的synchronized,volatile关键字

private static volatile Singleton_02 instance = null;private Singleton_02() {}public static Singleton_02 getInstance() {if(instance == null) {synchronized(Singleton_02.class) {if(instance == null) {instance = new Singleton_02();}}}return instance;}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词