zoukankan      html  css  js  c++  java
  • 单例模式

    
    单例设计模式 (单态)
        定义: 一个类 只能允许有 一个对象存在.
        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步都是一步一步的推的!
  • 相关阅读:
    学习 TList 类的实现[1]
    Dll 使用 PChar 参数的小例子
    学习使用资源文件[11]
    【转载】OGRE 内存管理
    【转载】Ogre的内存分配策略
    【转载】.NET面试题系列[0]
    【转载】深入探讨透视投影坐标变换
    【转载】四元数-Quaterion
    【转载】齐次坐标
    【转载】深入研究Windows内部原理绝对经典的资料
  • 原文地址:https://www.cnblogs.com/forqiwen/p/8949508.html
Copyright © 2011-2022 走看看