• PHP设计模式(四)单例模式(Singleton For PHP)


    今天讲单例设计模式,这种设计模式和工厂模式一样,用的非常非常多,同时单例模式比较容易的一种设计模式。

    一、什么是单例设计模式

      单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在

    二、单例模式的技巧

    1. 利用$_instance私有变量来保存类的唯一实例化对象;
    2. 设计一个getInstance对外公开的函数,可以获取类唯一实例;
    3. 防止用户用new实例化,和克隆,构造两个__construct、__clone私有函数;

     三、单例模式的应用场景

      数据库设计,我们发送一次请求,可能会需要访问不同的表,那么如果每次访问都 new 一个实例,那必然会造成资源的浪费,所以使用单例模式,可以很好的节省资源。

    单例类:

    /**
     * Singleton pattern
     */
    
    class DataBase
    {
        /**
         * 静态成品变量,保存全局实例
         */
        private static $_instance = null;
    
        /**
         *  测试变量,存储日志信息
         */
        private static $_msg = null;
    
        /**
         * 私有构造方法,防止外界实例化对象
         */
        private function __construct()
        {
            $connect = "连接数据库操作";
        }
    
        /**
         * 私有化克隆方法,防止外键克隆对象
         */
        private function __clone()
        {
        }
    
        /**
         * 静态方法,外界获取实例的唯一接口
         * @return Object 返回对象唯一实例
         */
        public static function getInstance()
        {
            if (!self::$_instance){
                self::$_instance = new DataBase();
                self::$_msg = "这是一个新对象" . "<br>";
            }else{
                self::$_msg = "这个是一个旧的对象" . "<br>";
            }
    
            return self::$_instance;
        }
    
        public function log()
        {
            echo self::$_msg;
        }
    }

    客户端测试代码:

        $dbA = DataBase::getInstance();
        $dbA->log();
    
        $dbB = DataBase::getInstance();
        $dbB->log();
    
        $dbC = DataBase::getInstance();
        $dbC->log();

    输出结果:

      这是一个新对象
      这个是一个旧的对象
      这个是一个旧的对象

     “对象”?,程序员怎么可能有对象!~

    如果有什么讲的疑问或者讲的不好的地方,欢迎大家留言。

  • 相关阅读:
    从缓冲上看阻塞与非阻塞socket在发送接收上的区别
    关于TCP封包、粘包、半包
    CURL 和LIBCURL C++代码 上传本地文件,好不容易碰到了这种折腾我几天的代码
    Spring boot 搭配 JPA 生成表注释 和 字段注释
    Spring Data JPA 中常用注解
    SpringBoot Data JPA 关联表查询的方法
    Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany
    Spring Boot Jpa 表名小写转大写
    SpringBoot入门系列~Spring-Data-JPA自动建表
    使用Spring-Session共享使用Session
  • 原文地址:https://www.cnblogs.com/wilburxu/p/6096537.html
Copyright © 2020-2023  润新知