昨日,从新温习了一下工厂模式和单例模式。设计模式
而且从新认识了设计模式,在学校期间接触过设计模式。学习
可是,在那个时期,学设计模式只是单纯的学习理论知识而已。spa
ps:顺便吐槽一下,上学期间学习的东西,大多数的状况会在将来的某个时间点彻底遗忘掉。设计
最根本的缘由在于,那个时期说学习的东西更偏重与理论,理论这种东西,只是潜移默化的告诉你“我知道这个”。code
可是,当你真正开始用这个东西的时候发现无从下手。这也就形成了大学生找工做眼高手低的现象。对象
(以上纯属我的观点)blog
-------------------------------------------------回到正题-------------------------------------------------------------get
先讲一下单例模式的我的理解:同步
单例模式,顾名思义,就是在一个运行机制(应用程序)中,一个class类只有一个实例的存在。class
下面以小华的故事做为主线,讲一下单利模式的三种实现,若是理解有误,欢迎指出。
在小华初中的时候电脑尚未那么普及,小华很是想玩电脑(去QQ农场偷个菜什么的(●'◡'●)),
刚好,邻居大土豪给儿子买了一台,因而乎小华就去了~~~可是,小华发现有好多人都和小华同样在等着玩电脑。
小土豪说:大家先等我玩完了!在去决定谁来玩。
基于这种思考,就开始实现讲关于小华的故事--单例模式:
小华的故事一、
开始时,小华的邻居大土豪买了一台电脑:
private static Singleton instance = new Singleton();
小土豪说这是个人电脑:
private Singleton(){ }
小土豪玩累了,让给下一我的来玩:
private static Singleton getInstance(){ return instance; }
那个时候电脑就是精神的粮食,而你们很是须要这种粮食,能够说是很是饿。
因此,上面说实现的这种单例模式成为“饿汉模式”。
小华的故事二、
后来,小华认识了一个豪友,豪友也有电脑:
private Singleton(){
}
豪友早就玩腻了电脑,电脑就放在那里也不开机,
private static Singleton instance;
可是,对于小华来讲怎么能让电脑就这么放着浪费呢?!
豪~电脑可玩乎~~~,豪友很大方---随便玩!
public static Singleton getInstance(){ if(instance == null){ return instance = new Singleton(); }else{ return instance; } }
有个豪友是多么重要啊!
不用像饿汉同样,每天等着小土豪玩完再玩。能够很慵懒的想玩就玩。因此,这种慵懒的生活就叫作“懒汉模式”。
小华的故事三、
好景不长,豪友的表弟暑假要在豪友家住,摆明了就是为了玩电脑去的。
电脑仍是豪友的电脑:
private Singleton(){ }
豪友通常仍是不怎么玩,电脑一如既往的闲着:
private static Singleton instance;
可是,小华却有了顾及。先要看电脑有没有人再用。
难免会发生这样一种状况,小华打开电脑的同时,豪友的表弟也进来要玩电脑。
豪友也是够仗义,告诉表弟电脑锁上了密码忘了,你先出去玩去吧!等电脑好了再叫你。
public static Singleton getSingle(){ //外部经过此方法能够获取对象 if(single == null){ synchronized (Singleton.class) { //保证了同一时间只能只能有一个对象访问此同步块 if(single == null){ single = new Singleton(); } } } return single; //返回建立好的对象 }
这样,豪友骗表弟电脑锁住了,就是所谓的“双重锁模式”。
这就是小华的故事--单例模式。