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