php设计模式之单例(Singleton)模式

该模式属于创建型模式


单例模式:一个类只能创建出一个对象。


单例模式代码如下:

<?php

//单例模式:一个类只能创造出一个对象

/*实现单例,必须满足以下条件:
1.不让克隆(私有化克隆魔术方法)
2.不让创建对象(私有化构造方法),不能在类外部使用new关键字创建对象。
3.进入到类中,创建对象(静态方法)
4.要在类中使用静态属性来保存已经产生的对象,用于判断
*/

/*单例模式:满足三私一公
          三私:私有构造方法,私有克隆方法,私有静态属性
          一公:公共静态方法(产生对象)
*/

class Single
{
    private $name;
    private static $single; //定义一个静态属性用来保存实例化后的对象

    //私有化构造方法 让对象不能在外部被创建 就是不能在外部new  Single这个类
    private function __construct($key)
    {
        $this->name = $key;
    }

    //私有化克隆方法 让对象不能在外部被克隆
    private  function __clone(){

    }

    //静态方法 让类进入到类的内部实例化得到对象
    public static function get_instance($name)
    {
        //判断对象是否已经存在 如果存在直接返回已有对象 否则创建一个新对象
        if(self::$single)
        {
            //对象已存在 直接返回已经存在的对象
            return self::$single;
        }
        else
        {
            //对象不存在 创建对象保存到定义好的静态属性中保存 并返回
            return self::$single = new Single($name);
        }
    }

}

$res = Single::get_instance('zyl');
var_dump($res);

$res2 = Single::get_instance('hxf');

var_dump($res2);
//最终输出结果都是: zyl hxf没有被输出 这样就实现了单例模式


/*单例模式优点?
1.改进系统的设计
2.只能创建一个对象,能够节省资源(内存)
单例模式的缺点?
1.难于调试
2.隐藏的依赖关系
3.无法用错误类型的数据覆写一个单例
*/

?>


声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

精彩评论

全部回复12人评论7,777人参与