>  기사  >  백엔드 개발  >  PHP的单例模式

PHP的单例模式

WBOY
WBOY원래의
2016-06-06 20:17:062503검색

哪位大哥用通俗的语言给我介绍一下什么是单例模式?最好可以有代码跟随(网上的语言太专业,表示理解不懂)

回复内容:

哪位大哥用通俗的语言给我介绍一下什么是单例模式?最好可以有代码跟随(网上的语言太专业,表示理解不懂)

1、new ChuiZi() 就是生成一次实例,生成一次实例就是造一个锤子。
2、如果你每次用到锤子,你就造一个锤子,那多费铁啊,用地方储存啊。计算机里就是要用内存啊,要用资源啊。
3、于是就有人想,怎么只用一个锤子,而不是每次都New一个锤子。

于是就有了单例模式 :

<code>class ChuiZi {

    static private $_instance = NULL;

    public static function getInstance() {
        if(self::$_instance == NULL) {
            self::$_instance = new ChuiZi();
        }

        return self::$_instance;
    }
}

// 这样 ChuiZi::getInstance(); 大家就都是用同一个实例啦
</code>

4、虽然我们可以要求同伴都ChuiZi::getInstance()这么写这么调用。但是难免有人会new 一个,或者克隆一个。那不就不是单个实例了!!!于是:

<code>class ChuiZi {

    static private $_instance = NULL;

    public static function getInstance() {
        if(self::$_instance == NULL) {
            self::$_instance = new ChuiZi();
        }

        return self::$_instance;
    }

    private function __construct() {}
    private function __clone() {}

}
</code>

所以发现这设计模式,不是为了装逼而是为了解决问题。
以上就是单例模式。

不要问我一个锤子够用吗!!!
要是问我是不是所有情况都适合用单例,我倒是想好了一个案例:
new GirlFriend();

实现资源、对象、参数的共享,通常就是两种实现方式,一种是静态化,第二就是单例模型。
相比于静态化,单例模型更加优雅一下,它可以更加方便的随时释放对象,更换对象,也能很好的与其他非静态对象桥接。在很多其他场合,单例模型都有不错的体现,比如iOS、Android中最基础的Application类就是单例化的

说个用得比较多得实际案例吧
一般情况下,DB类都是应用了单例模式的.
实例化一次后,多次调用都不会被实例化,避免性能浪费.

单例!
目的就是为了防止产生多个实例化对象
第一次产生后放到类的一个静态变量中,下次再实例化就直接返回这个静态变量

单例模式就是某个类只能产生一个实例。这个类的构造函数用private修饰,这样其他类就不能构造这个类的实例,只能由这个类自己实例化一个提供给别的类。
应用场景,比如某个类是控制某个生产线的运作流程,那么这个类最好用单例模式。因为控制类只能有一个,多了的话,那么多个类一起控制运作,岂不乱了套。

提供一种更好的写法

<code>private static $_instance;

public static function getInstance()
{
    if (! self::$_instance instanceof self) {
        self::$_instance = new self();
    }
    return self::$_instance;
}</code>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.