存档

‘生活’ 分类的存档

评论暂时关闭

2010年1月3日

博客评论暂时关闭, 有问题请发信件到邮箱ircman@163.com

admin 生活

PHP中单件模式(SingletonPattern)的实现

2009年4月29日

单件(singleton)模式作为设计模式的一个典型而且简单的构造型模式, 已经在很多项目的实际开发中被广泛使用, 单件模式要求一个类有且仅有一个实例,然后提供一个全局的访问点.也就是其所有的相关操作都是基于同一个实例的引用.
单件模式的特点:

  • 单件类只能有一个实例
  • 单件类必须自己创建自己的唯一实例
  • 单件类必须给所有其它对象提供这一实例
  • 单件模式的优点:

  • 从逻辑上来讲, 仅有一个实例保证了逻辑的正确性
  • 通过共享减少的使用
  • 减少应为频繁的构造而带来的应用上的损失
  • 下面通过一个简单的例子来说一些单件模式
    在我们实际的应用中, 大家都知道数据库的连接资源是非常宝贵的, 通过数据库句柄到数据库的连接是独占的,每次的连接和关闭数据库都是一笔非常大的开销, 那么我们如何在应用程序中来共享数据库句柄呢? 我们可以通过单件模式实现.
    以下程序用到三个PHP文件, 程序只是为了展示单件模式,本身不具备任何价值.
    MySQL.php

    class MySQL {
    	private $dbhost = 'localhost';
    	private $dbuser = 'root';
    	private $dbpass = '123';
    	private $db	    = 'test';
     
    	public $guid;
     
    	//======================================
    	// 函数: connect()
    	// 功能: 连接数据库
    	// 返回:
    	//======================================
    	public function __construct()
    	{
    		$this->link_id = mysql_connect($this->dbhost, $this->dbuser, $this->dbpass);
    		$this->guid = md5(uniqid());
    		if (!$this->link_id)
    		{
    			$this->halt("数据库连接失败.请检查连接参数.");
    			return;
    		}
     
    		if (!mysql_select_db($this->db, $this->link_id))
    		{
    			$this->halt("选择数据库".$this->db."失败.");
    			return;
    		}
    		mysql_query("SET NAMES 'utf8'");
    	}
    }

    Singleton.php

    <?php
    class Singleton {
    	private $_db;
    	private static $_single = null;
     
    	public static function getInstance() {
    		if (self::$_single === null)
    			self::$_single = new Singleton();
    		return self::$_single;
    	}
     
    	function __construct() {
    		$this->_db = new MySQL();
    	}
     
    	public function db() {
    		return $this->_db;
    	}
    }
     
    /* End of file */
    /* Location: */

    Test.php

    <?PHP
    require_once ('MySQL.php');
    require_once ('Singleton.php');
    header('content-type:text/html; charset=utf-8');
     
    echo '单件模式____________________________<br />';
    $s1 = Singleton::getInstance()->db();
    $s2 = Singleton::getInstance()->db();
    echo '$s1->guid:'.$s1->guid.'<br />';
    echo '$s1->guid:'.$s2->guid.'<br />';
    echo ($s1 === $s2) ? 'true' : 'false';
    echo '<br />';
     
    echo '直接实例化对象________________________________<br />';
    $d1 = new MySQL();
    echo '$d->guid:'.$d1->guid.'<br />';
    $d2 = new MySQL();
    echo '$d1->guid:'.$d2->guid.'<br />';
    echo ($d1 === $d2) ? 'true' : 'false';
    ?>

    将这三个文件放到一个目录中, 最后浏览test.php,可以看到
    通过单件模式获取的2个对象guid参数任何时候都是相同的,且这两个对象是恒等的.
    而直接实例出来的2个DB对象则刚好相反.
    通过比较, 相信你已经很轻松的掌握了单件模式的特点.

    转载请注明出处:http://www.suiyuan.org

    admin 生活

    无处安放的青春

    2009年4月10日

    1231
    真的有来世吗?
    那么
    我愿做
    一只懂得飞翔
    不懂爱情的小鸟
    一朵瞬间开放
    无声消融的雪花
    甚至
    窗前的一角蓝天
    掀乱书页的风
    落进
    你手心里的
    一滴小雨

    推荐阅读无处安放的青春

    这几天出差, 闲来无暇一直在手机上看这本小说, 优美细腻的笔锋, 忧伤婉约的爱情, 欲罢不能的愁绪, 这是就是吕婉的作品, 它说的不仅仅是爱情, 更多的是爱情的思考. 爱情与婚姻或许从来都不是因果的关系, 爱情真的可以让我们放弃一切吗? 包括我们的自私? 即使没有杜晓斌, 李然和周蒙或许也会分开, 因为还会有下一个杜晓斌. 我相信李然是深爱着蒙蒙的, 我们没有权利指责他的自私, 他和杜晓斌在一起完全是因为责任吗? may be not. 每个人都有权利追求自己想要的. 或许这就是青春, 留下的总是那些支离破碎, 唯美而有伤感的片段.

    P.S 佟大为和江一燕拍的电视剧很不错, 诠释的很完美, 只不过相对来讲, 我还是更喜欢小说的叙述.

    admin 生活

    一些开发常用的工具集(不断更新中…)

    2009年4月7日

    在线工具集

    网上转载的, 原处点我

    admin 生活

    上街, 第四赤泥库

    2009年3月29日

    去了一趟上街, 那边有我们的设备进行维护, 还有软件方面需要做一些改动. 去看了看.
    野外真是漂亮. 山上的野花为谁开呀~~为谁开~~…

    我们的水位计设备

    我们的水位计设备

    abcd0008

    同事准备出发, 免费脚蹬船, 目标->湖心...

    abcd0010

    千树万树梨花开

    abcd0013

    满山开遍油菜花

    admin 生活

    三门峡

    2009年3月25日

    因为单位在三门峡枢纽局有个项目, 需要过去研究一下软件方案的事, 昨天跑了一趟三门峡, 一天下来都感觉很困, 不知为何? 难道春困竟如此厉害?

    admin 生活