码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2018-02-06 14:12:18      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:dbconnect   root   nec   blank   throw   返回   概念   mem   struct   

单例模式概念

单例模式是指整个应用中类只有一个对象实例的设计模式。

单例模式的特点

    一个类在整个应用中只有一个实例
    类必须自行创建这个实例
    必须自行向整个系统提供这个实例

php中使用单例模式的原因

我用php大部分操作都是和各种数据库打交道,包括mysql,redis,memcache等各种关系型和非关系型数据库,所以一个应用中会 存在大量连接数据库的操作,如果不用单例模式,那每次都要new操作,但是每次new都会消耗大量的内存资源和系统资源,而且每次打开和关闭数据库连接都 是对数据库的一种极大考验和浪费。
贴出我之前常用的不好的数据库连接代码,给大家一个错误示范:

    <?php  
    class MysqlConn  
    {  
        // MYSQL数据库连接信息  
        const MYSQLHOSTNAME = "127.0.0.1";  
        const MYSQLUSERNAME = "root";  
        const MYSQLPASSWORD = "***";  
        const MYSQLDBNAME = "test";  
        const MYSQLCHARSET = "utf8";  
          
        /**
        * Description:mysql数据库连接函数
        * Return value:连接成功返回数据库连接句柄;连接失败返回错误消息
        */  
        public function MysqlConnect()  
        {  
            $db = new mysqli(self::MYSQLHOSTNAME, self::MYSQLUSERNAEM, self::MYSQLPASSWORD, self::MYSQLDBNAME); // 连接数据库  
            $db->set_charset(self::MYSQLCHARSET);  
            if (mysqli_connect_errno())  
            {  
                throw new CircleMysqlException("服务器系统故障", 1001);  
            }  
            else  
            {  
                return $db;  
            }  
        }  
    }  

 


缺陷:


每次数据库连接都要new这个类,然后调用mysqlconnect方法,返回close掉,频繁的new和数据库连接关闭操作是非常消耗资源的

改进:

每次应该直接返回当前应用中已经打开的数据库连接句柄
 

    //单例模式返回数据库连接句柄  
    $db = MysqlConn::SingleMysqlConnect();  

 


php单例模式的实现

 <?php  
    class Singleton  
    {  
        /**
         * Description:(1)静态变量,保存全局实例,跟类绑定,跟对象无关
         *             (2)私有属性,为了避免类外直接调用 类名::$instance,防止为空
         */  
        private static $instance;  
          
        /**
         * Description:数据库连接句柄
         */  
        private $db;  
          
        /**
         * Description:私有化构造函数,防止外界实例化对象
         */  
        private static function __construct()  
        {  
        }  
          
        /**
         * Description:私有化克隆函数,防止外界克隆对象
         */  
        private function __clone()  
        {  
        }  
          
        /**
         * Description:静态方法,单例访问统一入口
         * @return Singleton:返回应用中的唯一对象实例
         */  
        public static function GetInstance()  
        {  
            if (!(self::$instance instanceof self))//(1)判断一个对象是否是某个类的实例,(2)判断一个对象是否实现了某个接口。  
            {  
                self::$instance = new self();  
            }  
            return self::$instance;  
        }  
          
        /**
         * Description:获取数据库的私有方法的连接句柄
         */  
        public function GetDbConnect()  
        {  
            return $this->db;  
        }  
    }  

 

转发www.cnblogs.com/lh460795/p/3225650.html

单例模式

标签:dbconnect   root   nec   blank   throw   返回   概念   mem   struct   

原文地址:https://www.cnblogs.com/aten/p/8421670.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!