1

引言

  • 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
  • 主要解决:一个全局使用的类频繁地创建与销毁。
  • 何时使用:当您想控制实例数目,节省系统资源的时候。
  • 如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
  • 关键代码:构造函数是私有的。
  • 使用场景: 1、要求生产唯一序列号。 2、WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。 3、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。

代码范例

<?php
<?php
class Singleton
{
    //静态变量保存全局实例
    private static $_instance = null;

    //私有构造函数,防止外界实例化对象
    private function __construct()
    {
    }
    //私有构造函数,防止外界实例化对象
    private function __clone() 
    {
    }
    //静态方法,单例统一访问入口
    static public function getInstance()
    {
        //全局实例已经存在,直接返回,否则new创建实例
        if(is_null( self::$_instance) || isset( self::$_instance)) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    public function display()
    {
        echo "2333";
    }
}

$obj = Singleton::getInstance();
//new Singleton(); //报错
//$obj2 = clone $obj;//报错
$obj->display();

谢远东
4.5k 声望72 粉丝

Go Go Go