【趣解】单例模式之懒汉式、恶汉式

单例模式很好理解,就比如一夫一妻制,当老公叫老婆的时候,肯定是指那个唯一的女生(特殊情况例外....),下面我用一种趣解的方式来讲解单例模式的基础版:懒汉式、饿汉式。

懒汉式:男生小时候很懒,没有找青梅竹马定亲。那么长大了,家里人得找男生要老婆啊,怎么办呢,结婚!(逼婚),但是有个问题,男生得去找老婆,形形色色的世界,难免会有第三者插手,所以需要一点手段保证只找到一个老婆(线程不安全)。

java代码如下:

/**
 * 懒汉式模式:在类加载时不初始化,当需要时再反馈(延迟加载)
 */
public class Husband01 {
	//这句话看起来很奇怪,就理解为一开始每个男人都是没有老婆的
	private static Husband01 wife = null;
	//私有化老公,让小三无法拥有
	private Husband01(){}
	
	//当家里人找你要老婆的时候
	public static synchronized Husband01 getWife(){//添加synchronized防止小三插入问题
		if(wife == null){
			wife = new Husband01();//这句话理解成老公和老婆结婚啦!
		}
		return wife;
	}
}

饿汉式:男生很饥渴,一生下来就找到青梅竹马并订了娃娃亲,既然订了娃娃亲,如果家里找男生要老婆,肯定告诉他们定的娃娃亲那个老婆啦。当然,既然订了娃娃亲,男生已经有了老婆,那么就不会去找小三,不用担心安全问题咯(线程安全)。

java代码如下

/**
 * 饿汉式,在类加载时不初始化,不可延时加载,天生线程安全。
 *
 */
public class Husband02 {
	//一样看起来是个奇怪的语句,理解成每个男人在生下来就被家人订了娃娃亲
	private static Husband02 wifi = new Husband02();
	//私有老公,让小三无法拥有
	private Husband02(){}
	
	//当家里人找你要老婆的时候;既然订了娃娃亲,就不用加synchronized防止小三插入
	public static Husband02 getInstance(){
		return wifi;
	}
}
一、至于懒汉式为什么线程不安全?

很简单理解,如果两个女生同时来找男生领证结婚,那么他们两个都不违背重婚罪(因为男生在和她领证之前没有和其他人领证)。

二、懒汉式和饿汉式的效率?

想想就知道,肯定是定娃娃亲(饿汉式)效率高啊!

三、各自的优缺点?

饿汉式:不用担心出轨(线程安全),但是男生从小就要开始花两份钱(浪费资源)。

懒汉式:可能会出轨(线程不安全,可避免,但是会导致效率低),但是男生在结婚之前只用花一个人的钱(节约资源)。

既然有各自的优缺点,那么,能不能综合两者的优势呢?请看下一讲单例模式加强版


猜你喜欢

转载自blog.csdn.net/a445849497/article/details/57481987