PHP的单例模式

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

阅读 4.9k
6 个回答

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

于是就有了单例模式 :

class ChuiZi {

    static private $_instance = NULL;

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

        return self::$_instance;
    }
}

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

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

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() {}

}

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

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

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

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

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

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

提供一种更好的写法

private static $_instance;

public static function getInstance()
{
    if (! self::$_instance instanceof self) {
        self::$_instance = new self();
    }
    return self::$_instance;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题
宣传栏