大话PHP设计模式之单例模式

看了那么多单例的介绍,都是上来就说怎么作,也没见说为何这么作的。那小的就来讲说为何会有单例这个模式以便更好的帮助初学者真正的理解这个设计模式,若是你是大神,也不妨看完指正一下O(∩_∩)O
首先我不得不吐槽一下这个模式名字“单例”,初学者经过字面很难理解什么是单例,我以为应该叫“惟一”模式更贴切,下面会有个人理由。再往下看以前强烈建议先搞明白PHP中“类”的概念以及实现方式。segmentfault

单例模式的意义

设计单例模式的主要目的是防止已经实例化的对象不被再次实例化(啥叫实例化?兄弟你去百度吧),好比我已经实例化了一个类,等下次我再用此类的时候,会直接返回以前实例化的结果,而不会从新实例化一个新对象。设计模式

那么问题来了,这样有啥好处呢?其实你机器性能无限大的时候,这种模式没什么卵用,有这个模式就是当代计算机原理形成的,当咱们实例化一个类的时候,电脑会分配一个内存供你使用,说到这应该明白了吧,屡次new同一个类会很浪费内存,并且与这个内存相关的东西可能都会多一份,好比说网络链接数等等,总之一样的事别麻烦同一个类,否则类也会很累。。。网络

单例模式的举例

此时应该上代码,典型的教科书式的代码性能

class singleMode {  
  
    //用来指向已建立好的实例  
    public static $instance;  
  
    //判断是否已经建立过实例  
    public static function getInstance()  
    {  
    //注意!最关键的代码在这
        if (self::$instance === null) {  
            self::$instance = new self();  
        }  
        return self::$instance;  
    }  
}

这就是一个简单的单例模式,其实就是多了一个if用来判断$instance有没有值,有的话就直接返回$instance,没有就实例化一个新的,这样就避免了重复实例化的目的。
这里还有一个比较重要的概念,我看了不少的文章都没说起,就是static的声明,这个也是必须的条件之一。设计

为了能全面的理解代码,咱们来讲说static的做用,有耐心(无聊)的请往下继续看。没有的能够忽略了下面了,其实单例已经说的差很少了。
这里不得不又要说起当代计算机的原理了,来看看程序是怎么运行的:code

当咱们编写代码的时候,所有内容都储存在计算机的硬盘里,这时什么都没发生,和什么CPU,内存等都没半毛钱关系。当程序运行时,代码才产生做用(好像是废话)。代码运行到new Class的时候,计算机会分配给程序一个内存,当用完的时候内存要被回收。static的声明让计算机知道,这是一个静态变量,这个变量会随着内存分配时一并加载到内存里,这样程序运行的结果就被保留了下来,因此当咱们下一次访问getInstance()这个方法时,里面的$instance才会有值。若是不声明static,那么$instance变量就不会常驻内存,而是用的时候才被赋值,这样就没有了继承性。对象

回到开头,为何说叫“惟一”模式比较适合呢,由于单例单从字面上理解是单独的例子,并不能说明是独一无二的,可是惟一只有一个是吧。继承

上面是简单的单例模式,本身写程序的话够用了,若是想继续延伸,请传送至大话PHP设计模式之单例模式升级版内存

相关文章
相关标签/搜索