单例模式的引发的陈年回忆
记着N年以前,那时候还在上大学,有一门科目叫做软件体系结构,教我们的老师是个40岁左右的女老师,姓韩,好像是东北大学博士毕业的,之所以对她还有些印象,那是因为初恋女友Y同学是被保送到东北大学读研的,而当时韩老师和Y同学的师生关系好像还挺不错,当然也是Y同学确定保送东北大学读研的那一年,我们和平而坚决地分开了。。
我就读的大学是一所普通本科,我们学院一个年级可以保送的名额也仅仅只有三个,比起985 211那成堆的保送名额真的差的太远,Y同学是相当优秀的,大学四年,每次期末成绩必然是专业第一,而我,虽然一直在角落里面默默努力着,可成绩总是不尽人意,中游水平,也是因为某次关键的考试少考了一名,错过了成为党员的机会。。。。
后来我也加入了考研大军,虽然最终成绩比国家线高了50多分,可是距离我的目标院校还少了10分左右,所以我又输了。。。。
于是在调剂,二战,工作之间,,纠结半天,选择了我最无奈但是方向最明确的一个:工作。毕竟,我父母年纪不小了,是时候赚钱了。。
我大学时技术不好,或者说大部分人普遍技术都不好,虽然是软件工程专业的,但是实践机会太少,大部分时间都在上那些无聊的理论课,有些理论课,可以无聊到让全班大部分人睡着或者上课玩手机,比如离散数学,计算机组成原理。。
而软件体系结构这门课,算是无聊中的理论课相对有点激情的科目,因为,韩老师每次上课前都提问上节课的知识点。。。还会慷慨激昂的挥斥方遒指点江山,鼓励我们考研考研!!这门课就是给我们讲解设计模式的,不过,那些设计模式具体实现我大多忘却了,只记着一些名字:工厂模式,抽象工厂模式,桥接模式,适配器模式,命令模式,建造者模式,观察者模式,迭代器模式,策略模式....有一个很有趣的模式我却还记着比较清楚:单例模式。因为当时分为懒汉式和饿汉式,自己感觉很有趣(那时的快乐就那么简单),而且找工作时也有面试官让我手写单例模式(幸亏写出来了)。。
最近随意点开了一篇博客,讲单例模式的,原本没想仔细看,然而却发现,单例模式居然有六种实现模式,而我知道的两种仅仅是最简单的两种,突然感觉自己很无知。。(啪啪打脸)
于是乎,自己拜读一番,然后写了点demo。。今天也是打算正儿八经聊聊单例模式的。。不过有些触景生情,一不小心扯远了。好吧,现在我们言归正传,开始聊单例模式和它的六种实现。
再稍等下,我想说,当年软件体系结构这门课也是考了89的人,不高但是也不低啊,嘻嘻。
单例模式--从私有化无参构造函数开始
我不知道该怎么陈述我的话语,以前写博客都是大摆理论知识加点自写的demo代码,坦白讲,连我自己都不想看,于是想从这篇开始做出一些改变,用通俗的话语来讲技术理论讲明白,第一次尝试这种风格,还请观众给点勇气,多多鼓掌。
所以单例模式,从字面上来讲,那就是单个实例的模式,只创造一个实例。我们想一下哈,平时工作写代码时,是不是动不动就new一下,动不动就给一个实体创造一个对象,那样的话我们就可以针对某个实体创造多个了实例了,我们都明白,在新建一个实体后,即使不声明构造方法java也是会默认的提供一个无参构造方法的,而我们平时new 实例也就是通过这个无参构造方法实现的,现在将这个无参构造方法声明为私有的,那么就不允许外部去创建了,举个例子。
Zae z1 = new Zae(); Zae z2 = new Zae(); Zae z3 = new Zae();