单例设计模式

单例设计模式的特点:
 1、在用户量大的应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源。

  2、使用单例设计模式,可以全局控制某些配置信息,方便调试,单例设计模式只有一个入口,所有的代码都集中在一个类中,定位问题简单。

单例模式的特点:

  1、一个类只能有一个类对象(只能实例化一个对象)

  2、它必须自己创建这个实例

  3、它必须自行向整个系统提供这个实例

  4、构造函数和克隆函数必须声明为私有的,这是为了防止外部程序 new 类从而失去单例模式的意义

  5、 getInstance()方法必须声明为公有的,必须调用此方法以返回唯一实例的一个引用

  6、拥有一个保存类的实例的静态成员变量

  7、PHP的单例模式是相对而言的,因为PHP的解释运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收

  8、拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)

  另外,需要创建__clone()方法防止对象被复制(克隆)

class Redis {
/**
 * 实例化的对象,单例模式.
 * @var \iphp\db\Redis
 */
static private $_instance= array();
private function __construct($config,$attr=array())
    {
        if ( !extension_loaded('redis') ) {
            E(L('_NOT_SUPPORT_').':redis');
        }
        $this->attr        =    array_merge($this->attr,$attr);
        $this->port        =    $config['REDIS_PORT'] ? $config['REDIS_PORT'] : 6379;
        $this->host        =    $config['DB_HOST'];
        $this->redis       =    new \Redis();
        $this->redis->connect($this->host, $this->port, $this->attr['timeout']);
        if($config['auth'])
        {
            $this->auth($config['auth']);
            $this->auth    =    $config['auth'];
        }
        $this->expireTime    =    time() + $this->attr['timeout']; 
    }

    /**
     * 得到静态实例化的对象.
     * 为每个数据库建立一个连接
     * 如果连接超时,将会重新建立一个连接
     */
    public static function getInstance($config,$attr=array())
    {
        if(!self::$_instance || !(self::$_instance instanceof self)){
            self::$_instance = new self($config,$attr=array());
        }
        return self::$_instance;
    }

    // 静止被克隆
    private function __clone(){}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值