zoukankan      html  css  js  c++  java
  • php -- 设计模式 之 单例模式

    实现单例的条件:三私一公

       三私:私有化构造方法:不让外部创建对象

        私有化克隆方法:不让外部克隆对象

        私有静态属性:保存已经产生的对象

       一公:公共静态方法:在类内部创建对象

    实例:

    <?php
    
        //单例模式:一个类只能创造一个对象
    
        class Single{
            //属性
            private $name;
            public static $counts = 0;
    
            //定义一个静态属性来保存对象
            private static $single;
            
            //私有化构造方法
            private function __construct($name){
                $this->name = $name;
                //计数
                self::$counts++;
            }
    
            //私有化克隆方法
            private function __clone(){
                //计数
                self::$counts++;
            }
    
            //静态方法,让类进入到类的内部进行实例化得到对象
            public static function getInstance($name){
                //判断对象是否已经存在,如果存在则直接返回原来对象,否则创造新对象
                if(self::$single){
                    //对象已经存在,返回原来对象
                }else{
                    //对象不存在
                    self::$single = new Single($name);
                }
    
                //返回对象
                return self::$single;
            }
        }
    
        //实例化
        //$single = new Single('林志炫');
    
        //访问类对象数量
        //echo Single::$counts;
    
        //得到对象
        $single = Single::getInstance('马云');
        var_dump($single);
    
        //访问类对象数量
        echo Single::$counts;
    
        //得到对象
        $single = Single::getInstance('马化腾');
        var_dump($single);
    
        //访问类对象数量
        echo Single::$counts;

    优点:

      只能创建一个对象,可节省内存资源

  • 相关阅读:
    发现另一种简便的完全居中css写法 element.style { width: 500px; height: 200px; background: #eee; position: absolute; margin: auto; top: 0; left: 0; bottom: 0; right: 0; }
    子网掩码随笔
    C# MVC网站自动由HTTP转为HTTPS
    c++中的void*
    权利的游戏
    字符串
    字符串
    权利的游戏 S0803
    加权有向图
    加权无向图
  • 原文地址:https://www.cnblogs.com/hf8051/p/4648314.html
Copyright © 2011-2022 走看看