资讯专栏INFORMATION COLUMN

单例设计模式

kviccn / 2645人阅读

摘要:单例设计模式的特点在用户量大的应用中会存在大量的数据库操作使用单例模式则可以避免大量的操作消耗的资源。使用单例设计模式,可以全局控制某些配置信息,方便调试,单例设计模式只有一个入口,所有的代码都集中在一个类中,定位问题简单。

单例设计模式的特点:

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

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

单例模式的特点:

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

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

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

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

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

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

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

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

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

class Redis {
/**
 * 实例化的对象,单例模式.
 * @var iphpdbRedis
 */
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(){}
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30086.html

相关文章

  • Android中的设计模式单例模式

    摘要:总结单例是运用频率很高的模式,因为客户端没有高并发的情况,选择哪种方式并不会有太大的影响,出于效率考虑,推荐使用和静态内部类实现单例模式。 单例模式介绍 单例模式是应用最广的模式之一,也可能是很多人唯一会使用的设计模式。在应用单例模式时,单例对象的类必须保证只用一个实例存在。许多时候整个系统只需要一个全局对象,这样有利于我么能协调整个系统整体的行为。 单例模式的使用场景 确保某个类有且...

    yzd 评论0 收藏0
  • JavaScript设计模式----单例模式

    摘要:不符合设计模式中的单一职责的概念。引入代理实现单例模式引入代理实现单例模式的特点我们负责管理单例的逻辑移到了代理类中。的单例模式对比在以上的代码中实现的单例模式都混入了传统面向对象语言的特点。 声明:这个系列为阅读《JavaScript设计模式与开发实践》 ----曾探@著一书的读书笔记 1.单例模式的特点和定义 保证一个类仅有一个实例,并且提供一个访问它的全局访问点。 2.传统面向对...

    selfimpr 评论0 收藏0
  • Java设计模式优化-单例模式

    摘要:单例模式概述单例模式是一种对象创建模式,用于产生一个类的具体事例。所以解决了线程安全问题参考失效原因和解决方案中单例模式的缺陷及单例的正确写法懒汉式静态内部类私有构造器获取单例的方法静态内部类持有单例作为静态属性。 单例模式概述 单例模式是一种对象创建模式,用于产生一个类的具体事例。使用单例模式可以确保整个系统中单例类只产生一个实例。有下面两大好处: 对于频繁创建的对象,节省初第一...

    eccozhou 评论0 收藏0
  • Java设计模式-单例模式(Singleton Pattern)

    摘要:如果需要防范这种攻击,请修改构造函数,使其在被要求创建第二个实例时抛出异常。单例模式与单一职责原则有冲突。源码地址参考文献设计模式之禅 定义 单例模式是一个比较简单的模式,其定义如下: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 或者 Ensure a class has only one instance, and provide a global point of ac...

    k00baa 评论0 收藏0

发表评论

0条评论

kviccn

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<