单例模式

2020-01-29  本文已影响0人  最底层的技术渣

概念

单例模式:singleton,是一种类的设计只会最多产生一个对象的设计思想

  • 单例模式的类只能在一次运行中产生一个对象
  • 单例模式为了解决如何只产生一个对象,需要使用以下解决方案,简称三私一公
  • 私有化构造方法:不让在外部产生多个对象
  • 私有化克隆方法:不允许对象被克隆产生新对象
  • 公有化静态方法:运行进入类内部产生对象
  • 私有化静态属性:保存已经产生的对象
栗子
<?php

class Singleton
{
    /**
     * 增加静态属性:私有,不允许外部修改,否则外部修改之后就没有意义了
     * @var null
     */
    private static $object = null;

    /**
     * 禁止在类外部实例化对象
     * Singleton constructor.
     */
    private function __construct()
    {

    }

    /**
     * @return Singleton|null
     */
    public static function getInstance()
    {
        //判断内部属性是否存在对象(is_object函数):最好的判定是存的对象是当前类的 instanceof
        if (!(self::$object instanceof self)) {
            //当前保存的内容不是当前类的对象
            self::$object = new self();
        }
        //返回对象给外部
        return self::$object;
    }

    /**
     * 在Singleton类中增加私有化的__clone()方法
     * 禁止对象的克隆,即在类内部私有化克隆方法
     */
    private function __clone()
    {
    }
}

$obj1 = Singleton::getInstance();
$obj2 = Singleton::getInstance();
var_dump($obj2, $obj1);
上一篇 下一篇

猜你喜欢

热点阅读