【PHP设计模式】单例模式

【写在前面】

        最近写一些关于PHP设计模式的文章,对常用设计模式进行总结,其中参考了关于设计模式的书籍、前辈的博客,以及自己的实际工作经验与体会。才疏学浅,如有疏漏,敬请交流。

       所谓设计模式,就是特定环境下同类问题的一种解决方案,与语言无关,随着各种各样问题的出现,编程界前辈们已经总结出一些具有共性的问题,及与其对应的解决方案。选择正确的设计模式,使得开发过程更高效、便捷,代码的可重用性、灵活性更高。

【单例模式】

      顾名思义,单例模式就是指在类中只new一个实例化对象,用于避免资源的浪费。使用场景如:Redis、MySQL等在应用中调用较为频繁的类。下面以Redis操作类为例,说明单例模式的基本结构:

connect('127.0.0.1',6379);
        if($result === false){
            throw new \Exception('redis connect error');
        }
    }
    
    //公有静态方法 引用一个实例对象
    public static function getInstance(){
        if(null === self::$_instance) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }
    
    //防止克隆多个实例
    private function __clone(){
 
    }
    
    //防止反序列化
    private function __wakeup(){
 
    }

    //清除连接实例(可选)
    public static function clear()
    {
        self::$_instance = null;
    }
}

在其他类中写一个测试方法,调用单例Redis:

';

        $redis2 = Dredis::getInstance();
        var_dump($redis2);
        echo '
'; $redis3 = Dredis::getInstance(); var_dump($redis3); } }

测试结果如下,多次调用为同一个实例:

【PHP设计模式】单例模式_第1张图片

 调用过程中如果清除实例,则会创建新的实例:

';
        Dredis::clear();

        $redis2 = Dredis::getInstance();
        var_dump($redis2);
        echo '
'; Dredis::clear(); $redis3 = Dredis::getInstance(); var_dump($redis3); Dredis::clear(); } }

【PHP设计模式】单例模式_第2张图片

 

你可能感兴趣的:(PHP)