• 单例模式


    
    单例设计模式 (单态)
        定义: 一个类 只能允许有 一个对象存在.
        1.不让进: 使类不能被实例化
        2.留后门: 设置静态方法
        3.给对象: 在静态方法里实例化该类
        4.判初夜: 判断是否是 第一次产生该类的对象
        5.设静态: 静态方法里 要使用静态属性
     */
    
    /*//1.不让进: 使类不能被实例化-----------------
    class Test
    {
        // 设置 一个封装的构造方法
        private function __construct()
        {
            //占位, 我就是不让你NEW我~~~
        }
    }*/
    
    /*//2.留后门: 设置静态方法--------------------
    class Test
    {
        // 设置 一个封装的构造方法
        private function __construct()
        {
            //占位, 我就是不让你NEW我~~~
        }
        //后门
        public static function getObject()
        {
            echo "啊,我是后门,进吧!<br>";
        }
    }*/
    
    /*//3.给对象: 在静态方法里实例化该类------------------
    class Test
    {
        // 设置 一个封装的构造方法
        private function __construct()
        {
            //占位, 我就是不让你NEW我~~~
        }
        //后门
        public static function getObject()
        {
            echo "啊,我是后门,进吧!<br>";
            return new self();//实例化一个对象给你
        }
    }*/
    
    /*//4.判初夜: 判断是否是 第一次产生该类的对象------------------
    class Test
    {
        private $obj = null;//属性值为对象,默认为null
        // 设置 一个封装的构造方法
        private function __construct()
        {
            //占位, 我就是不让你NEW我~~~
        }
        //后门
        public static function getObject()
        {
            echo "啊,我是后门,进吧!<br>";
            if ($this->obj === null) {
                $this->obj = new self();//实例化一个对象
            }
            //返回的属性 其实就是本对象
            return $this->obj;
        }
    }*/
    
    //5.设静态: 静态方法里 要使用静态属性------------------
    class Test
    {
        private static $obj = null;//属性值为对象,默认为null
        // 设置 一个封装的构造方法
        private function __construct()
        {
            //占位, 我就是不让你NEW我~~~
        }
        //后门
        public static function getObject()
        {
            echo "啊,我是后门,进吧!<br>";
            if (self::$obj === null) {
                self::$obj = new self();//实例化一个对象
            }
            //返回的属性 其实就是本对象
            return self::$obj;
        }
    }
    
    /*Test::getObject();//使用静态方法访问该类里的方法
    exit;*/
    
    $t1 = Test::getObject();
    $t2 = Test::getObject();
    $t3 = Test::getObject();
    $t4 = Test::getObject();
    $t5 = Test::getObject();
    $t6 = Test::getObject();
    $t7 = Test::getObject();
    $t8 = Test::getObject();
    
    //判断 两个对象 是否是同一个对象
    if ($t1 === $t6) {
        echo "哦, Yes! 是同一个实例<br>";
    } else {
        echo "哦, No! 不是同一个实例<br>";
    }
    
    第五步是成品,前面4步都是一步一步的推的!
  • 相关阅读:
    【2019.7.26 NOIP模拟赛 T1】数字查找(figure)(数学)
    【2019.7.25 NOIP模拟赛 T1】变换(change)(思维+大分类讨论)
    简析平衡树(四)——FHQ Treap
    【BZOJ3529】[SDOI2014] 数表(莫比乌斯反演)
    【洛谷1829】 [国家集训队] Crash的数字表格(重拾莫比乌斯反演)
    【PE512】Sums of totients of powers(欧拉函数)
    【CFGym102059G】Fascination Street(思维DP)
    【CF438D】The Child and Sequence(线段树)
    【2019.7.16 NOIP模拟赛 T2】折叠(fold)(动态规划)
    【UVA1303】Wall(凸包)
  • 原文地址:https://www.cnblogs.com/forqiwen/p/8949508.html
Copyright © 2020-2023  润新知