+ -
当前位置:首页 → 问答吧 → 【一天一个设计模式】02 - 单件模式

【一天一个设计模式】02 - 单件模式

时间:2008-11-06

来源:互联网

虽然昨天的工厂模式的精髓还没完全领会,而且提问的帖子也没人理。。。。。。。。

但是今天还是继续吧。。。。。

还是上例子,稍微加点理解。。。。


<?php
class userInfo
{
    private $userName;
    //唯一的实例
    private static $instance;
    //构造方法
    private function __construct()
    {
        //查询数据库,获得用户名
        $this->userName = 'lightsaber';
    }
    //获取对象实例
    public static function getInstance()
    {
        if (self::$instance=='') self::$instance = new userInfo();
        return self::$instance;
    }
    //返回用户信息
    public function getUserInfo()
    {
        return $this->userName;
    }
}
//获取唯一的实例
$userInfo = userInfo::getInstance();
//显示用户名
echo '用户名是'.$userInfo->getUserInfo().'<br>';
//天气播报
echo '向用户'.$userInfo->getUserInfo().'播报天气<br>';
?>


其实单件模式还是比较好理解的一个模式,比如上面这个例子,用在数据库链接上,就可以保证数据库的唯一连接了

而单件模式也可以用于减少数据库的查询,感觉这个作用也是大大地~~~~,如下


<?php
class userInfo
{
    private static $userName;
    //查询数据库,获得用户名
    private static function findUserInfo()
    {
        //查询数据库,获得用户名
        self::$userName = 'lightsaber';
    }
    public static function getUserInfo()
    {
        //判断是否已经获取了用户数据
        if (self::$userName=='') self::findUserInfo();
        return self::$userName;
    }
}
//显示用户名
echo '用户名是'.userInfo::getUserInfo().'<br>';
//天气播报
echo '向用户'.userInfo::getUserInfo().'播报天气<br>';
?>


好了,单件模式我就能理解这么多了,而且例子也很具有代表性,大家自己【悟】吧。。。。

作者: kakashilw   发布时间: 2008-11-06

private function __clone(){}
if (self::$instance=='') self::$instance = new userInfo();
===>if (self::$instance==null) self::$instance = new self();

作者: NoAngels   发布时间: 2008-11-06

new this不行的?

作者: 0hudu   发布时间: 2008-11-06

我来支持,期待连载!

作者: yafeikf   发布时间: 2009-01-08

这个原创的质量也太差啦吧.

作者: 东至   发布时间: 2009-01-08

单件模式都好理解。。

作者: jfk0514   发布时间: 2009-01-12

质量不行!

作者: zhaofei299   发布时间: 2009-09-14