singleton设计模式:深入浅出单例子Singleton设计模式

        前序

        单例子Singleton设计模式可能是被讨论和使用最广泛个设计模式了这可能也是面试中问得最多个设计模式了
这个设计模式主要目是想在整个系统中只能出现个类例子这样做当然是有必然比如你软件Software全局配置信息或者
个Factory或是个主控类等等你希望这个类在整个系统中只能出现个例子当然作为个技术负责人你当
然有权利通过使用非技术手段来达到你比如:你在团队(Team)内部明文规定“XX类只能有个全局例子如果某人使用两
次以上那么该人将被处于2000元罚款!”(呵呵)你当然有权这么做但是如果你设计是东西是个类库或是
需要提供给用户使用API恐怕你这项规定将会失效你无权要求别人会那么做所以这就是为什么我们希望通过
使用技术手段来达成这样个目原因

        本文会带着你深入整个Singleton世界当然我会放弃使用C语言而改用Java语言使用Java这个语言可能更容易
让我介绍说明些事情


        Singleton教学版本

        这里我将直接给出个Singleton简单实现我相信你已经有这方面些基础了我们姑且把这具版本叫做1.0版

        view plain copy to clipboard pr?

    =dp-j>
  1. =alt>=comment>// version 1.0   
  2. ="">=keyword>public =keyword> Singleton   
  3. =alt>{   
  4. ="">    =keyword>private =keyword> =keyword>final Singleton singleton = =keyword>null;   
  5. =alt>  
  6. ="">    =keyword>private Singleton   
  7. =alt>    {   
  8. ="">    }   
  9. =alt>    =keyword>public =keyword> Singleton getInstance   
  10. ="">    {   
  11. =alt>        =keyword> (singleton =keyword>null)   
  12. ="">        {   
  13. =alt>            singleton= =keyword> Singleton;   
  14. ="">        }   
  15. =alt>        =keyword> singleton;   
  16. ="">    }   
  17. =alt>}   


        在上面例子中我想介绍说明下面几个Singleton特点:(下面这些东西可能是尽人皆知没有什么新鲜)

  1. 私有(private)构造表明这个类是不可能形成例子了这主要是怕这个类会有多个例子
  2. 即然这个类是不可能形成例子那么我们需要个静态方式让其形成例子:getInstance注意这个思路方法是在
    自己其可以访问私有构造所以他是可以保证例子被创建出来
  3. 在getInstance先做判断是否已形成例子如果已形成则直接返回否则创建例子
  4. 所形成例子保存在自己类中私有成员中
  5. 我们取例子时只需要使用Singleton.getInstance就行了
        当然如果你觉得知道了上面这些事情后就学成了那我给你当头棒喝下了事情远远没有那么简单

        Singleton实际版本

        上面这个存在比较严重问题是全局性例子所以在多线程情况下所有全局共享东西都会变得非常
危险这个也在多线程情况下如果多个线程同时getInstance那么可能会有多个进程同时通过
(singleton null)条件检查于是多个例子就创建出来并且很可能造成内存泄露问题熟悉多线程定会说——
“我们需要线程互斥或同步”没错我们需要这个事情于是我们Singleton升级成1.1版如下所示:

        view plaincopy to clipboardpr?

    =dp-j>
  1. =alt>=comment>// version 1.1   
  2. ="">=keyword>public =keyword> Singleton   
  3. =alt>{   
  4. ="">    =keyword>private =keyword> =keyword>final Singleton singleton = =keyword>null;   
  5. =alt>  
  6. ="">    =keyword>private Singleton   
  7. =alt>    {   
  8. ="">    }   



="xspace-totlerecord">4="xspace-totlepages">1/4="xspace-current">1234>
Tags:  javasingleton singleton singleton模式 singleton设计模式

延伸阅读

最新评论

发表评论