美文网首页PHP开发PHP经验分享
编程中的设计模式之单例模式

编程中的设计模式之单例模式

作者: phpworkerman | 来源:发表于2020-07-13 17:27 被阅读0次
    介绍

    单例模式是设计模式最简单的一种,属于创建型模式,该模式由以下三个特征:
    1.单例类只能有一个实例。
    2.单例类必须自己创建自己的唯一实例。
    3.单例类必须给所有其他对象提供这一实例。

    作用和应用场景

    在一个请求的生命周期中,往往需要对同一个类进行多次操作,而如果频繁的去 new 实例化对象,只会更多的消耗资源。应用场景多见于数据库的连接、日志等模块。

    单例连接数据库
    <?php
    class Client
    {
      //设置静态属性用来存放实例化的类
      private static $instance = null;
      private $dbname          = 'test';
      private $username        = 'root';
      private $passwd          = 'root';
      private $host            = 'localhost';
      private $pdo             = null;
      //禁止类的外部实例化
      private function __construct()
      {
        $this->pdo = new PDO("mysql:host={$this->host};dbname={$this->dbname}",$this->username,$this->passwd);
      }
      //禁止克隆对象
      private function __clone(){}
      //静态方法可不通过实例化在类的外部调用
      public static function getInstance()
      {
        if(is_null(self::$instance)){
          self::$instance = new self();
        }   
        return self::$instance;
      }
    
      public function execSql($query = '')
      {
        $result = $this->pdo->exec($query);
        if($result){
            echo '执行成功';
        }else{
            echo '执行失败';
        }
      }
      
      public function selectSql($query = '')
      {
        $result = $this->pdo->query($query);
        return $result->fetchAll();
      }
    }
    
    $client = Client::getInstance();
    $client->selectSql('select * from xxx');
    
    总结

    单列模式不光是对系统资源的节省,更是在一个类多处使用时提供了一致性。该模式在多线程时会有安全性的问题,但因为 PHP 是单线程语言,这个问题一般开发也不会关注到,不过 PHP 也有实现多线程的方式,就是安装 pthreads 扩展,这个留到以后的多线程学习时再进行扩展。

    相关文章

      网友评论

        本文标题:编程中的设计模式之单例模式

        本文链接:https://www.haomeiwen.com/subject/nawhcktx.html