单例模式疑惑?

<?php

class test{

protected function __construct(){

}

public static function getInstance(){
    static $_test;
    if (empty($_test)) {
        $_test = new test();
    }
    return $_test;
}

}

为什么在单例模式中该类要有一个public static的方法,而其他的方法都不能用public方法。这样做的目的是什么

阅读 3k
6 个回答

简单的说,就是不让再次初始化了,也没有这个必要,保证就一个实例。需要什么方法,你调用得到的实例中的public方法啊。

单例统一的访问入口

单例简单来说就是 只有一个访问入口 单例会阻止其他对象实例化自己的副本 。

这个静态方法是提供给该类意外的代码静态调用使用的,而楼主说类中其他方法都不是public方法,那肯定是因为设计上不允许类以外的代码直接调用类中的方法,而是通过静态调用getinstance方法实例化类,通过类自己调用类里面的方法,这样可以有效地避免类以外的代码随便修改类中的方法,确保了类中方法的安全性

单利模式必须确保只能有一个实例,并且要对其他所有对象提供这一实例;构造函数不能用public是为了避免类在外部被实例化,要不然就成多例了。另外,你这种方式线程也是不安全的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题