PHP设计模式(一)单例模式

单例模式解决的是如何在整个项目中创建唯一对象实例的问题,当需要保证对象只有一个实例的时候,这时候单例模式就该上场了。单例类不能在类的外部进行实例化,一个单例类应该具备以下几个因素:

必须拥有一个访问级别为private的构造函数,防止类被实例化。 必须拥有一个静态变量保存类的实例 必须拥有一个访问这个实例的公共静态方法,一般命名为getInstance() 必须有一个__clone方法,防止实例被克隆

<?php
declare(strict_types=1);

/**
 * 普通类
 * Class General
 */
class General
{
    public function __construct()
    {

    }
}

/**
 * 单例类
 * Class Single
 */
class Single
{
    public static $instance;

    /**
     * 防止使用 new 创建多个实例
     * Single constructor.
     */
    private function __construct()
    {

    }

    public static function getInstance()
    {
        if (!self::$instance instanceof self) {
            self::$instance = new static();
        }

        return self::$instance;
    }

    /**
     * 防止被克隆多个实例
     */
    private function __clone()
    {

    }

    /**
     * 防止反序列化
     */
    public function __wakeup()
    {
    }
}

$single = Single::getInstance();
$single1 = Single::getInstance();

$general = new General();
$general1 = new General();
$general2 = clone $general1;

var_dump($single);
var_dump($single1);

var_dump($general);
var_dump($general1);
var_dump($general2);

从上面图中可以看出,$single和$single1一直都是一个句柄,都是同一个实例。 而普通的类实例化之后都是单独的实例

单例模式通常用于数据库连接、日志记录等操作中。

蔡关荣博客
请先登录后发表评论
  • latest comments
  • 总共0条评论