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;

    优点:

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

  • 相关阅读:
    HDU 2655 主席树
    Codeforces Round #169 (Div. 2) A水 B C区间更新 D 思路
    Codeforces Round #402 (Div. 2) A B C sort D二分 (水)
    Docker 网络 Flannel
    Docker 搭建 etcd 集群及管理
    Iptables 端口转发
    CentOS7 citus9.5 集群安装及管理
    Ubuntu 忘记密码
    Zookeeper 启动错误
    数据结构 B树 B+树 B*树 LSM-树
  • 原文地址:https://www.cnblogs.com/hf8051/p/4648314.html
Copyright © 2011-2022 走看看