web development blog

> 编程 PHP设计模式之单例模式

php设计模式笔记,第一个是单例模式。单例模式理解起来还是比较容易的接受的。顾名思义,“单例”就是唯一,不同于其他类,我们可以实例化(new)N个,每一个都是独立的。

实现的单例模式的技巧:

1.利用$_instance私有变量来保存类的唯一实例化对象;

2.设计一个getInstance对外公开的函数,可以获取类唯一实例;

3.防止用户用new实例化,和克隆,构造两个__construct、__clone私有函数;

单例模式的好处:既然我们知道单利模式是唯一的,我们就可以对其的使用场景有了反向,比如数据库操作类,这种不需要每一次都不同实例的,可以用这种单例模式来设计,防止new太多实例,这样就可以避免不必要的资源浪费。

简单的代码演示,有日志输出,方便你理解单例模式的机制:
/**
 * PHP设计模式 之 单例模式
 * @website wmhfly.com
 */
class Singleton {
	
	/**
	 * 静态成品变量,保存全局实例
	 */
	private static $_instance = null;
	
	/**
	 *  测试变量,计算Singleton 被访问多少次
	 */
	private static $_count = 0;
	
	/**
	 *  测试变量,存储日志信息
	 */
	private static $_msg = '';
	
	/**
	 * 私有构造函数,防止外界实例化对象
	 */
	private function __construct(){}
	
	/**
	 * 私有化克隆函数,防止外键克隆对象
	 */
	private function __clone(){}
	
	/**
	 * 静态方法,外界获取实例的唯一接口
	 * @return Object 返回对象唯一实例
	 */
	public static function getInstance(){
		//统计访问次数
		self::$_count++;
		
		if(is_null(self::$_instance)){
			self::$_instance = new Singleton();
			//记录日志
			self::$_msg = '第一次被外界访问,实例化:self::$_instance = new Singleton()';
		}else{
			//记录日志
			self::$_msg = '第'.(self::$_count).'次访问,无需实例化,直接返回self::$_instance';
		}
		return self::$_instance;
	}
	
	/**
	 * 测试输函数,打印日志
	 */
	public function log(){
		echo self::$_msg;
	}
}

测试demo
///demo code
$singletonA = Singleton::getInstance();
$singletonA->log();

$singletonB = Singleton::getInstance();
$singletonB->log();

$singletonC = Singleton::getInstance();
$singletonC->log();


$singletonD = Singleton::getInstance();
$singletonD->log();

//输出日志
第一次被外界访问,实例化:self::$_instance = new Singleton()

第2次访问,无需实例化,直接返回self::$_instance

第3次访问,无需实例化,直接返回self::$_instance

第4次访问,无需实例化,直接返回self::$_instance

单例模式附件下载:Singleton.class.php

-留言评论-

  • 留言载入中...

-拍砖-

 

首页|前端技术|编程/php|生活|关于我

Copyright © 2012 wmhfly.com