设计模式详解

文章来源:http://www.cnblogs.com/huaxingtianxia/p/5544939.html

小华的故事--单例模式

 

昨日,重新温习了一下工厂模式和单例模式。

并且重新认识了设计模式,在学校期间接触过设计模式。

但是,在那个时期,学设计模式只是单纯的学习理论知识而已。

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;   //返回创建好的对象    
  }   
复制代码

这样,豪友骗表弟电脑锁住了,就是所谓的“双重锁模式”。

这就是小华的故事--单例模式。

posted @ 2017-10-25 09:31  Mr_陈  阅读(656)  评论(0编辑  收藏  举报