单例设计模式
单例设计模式的特点:
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(){} }
相关推荐
fraternityjava 2020-06-14
Kele0 2020-05-30
ahnuzfm 2020-05-07
gongruitao 2020-05-02
elizabethxxy 2020-04-27
xiaoemo0 2020-04-08
付春杰Blog 2020-03-26
JF0 2020-03-20
ahnuzfm 2020-02-03
Ingram 2020-01-16
缘起宇轩阁 2019-12-30
gongruitao 2020-01-04
zuixin 2020-01-03
pengkunstone 2019-12-27
waitui00 2019-12-22