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

PHP设计模式之单例模式

有时候我们需要一个对象只做一个特定的事情,并且程序中只需要这一个对象,那么要保证这个对象只被实例化一次,很多情况下很多人的做事是用引用。这样整个程序在运行过程中只使用这一个对象。

在OOP中,这种做法可能不被允许,复杂的项目或者多人开发的应用中这样做可能会有很多头疼的问题,因为有可能在其他地方错误的将这个对象再次实例化,所以我们需要在这个对象本身就控制这个问题,这里就要将到一种常用的设计模式:单例模式。

见的比较多的就是数据库的访问,往往我们只需要并且只允许一个对象访问数据库,在任何时候,应用程序中都只会有这个类仅有的一个事例存在。这可以防止我们去打开数据库的多个连接或者不必要地使用多余的系统资源。在更加复杂的系统中,使用单例模式在维持应用程序状态的同步方面也尤其有用。

单例类至少拥有一下三种公共元素:

1.拥有一个构造函数,并且必须被标记为private(私有)。

2.拥有一个保存类的事例的静态变量。

3.拥有一个访问这个事例的公共静态方法。

因为构造函数被标记为私有,单例类不能在其地方直接被实例化,只能被自生实例化。

在限制外部实例化单例类的同时还必须防止此类被复制,所以必须在类中创建一个空的私有方法__clone()。

下面给个简单的例子:

class Database {
    private $_db;
    private $_instance;

    private function __construct()
    {
        $this->_db = mysql_connect('连接数据库参数');
    }

    public static function getInstance()
    {
        if (!self::$_instance instanceof self) {
            self::$_instance = new self();
        } else {
            return self::$_instance;
        }
    }

    //some code...

    private function __clone() {};
}

POSTED ON 2010年06月5日,

发表您的看法

Trackbacks:0

Listed below are links to weblogs that reference
PHP设计模式之单例模式 from andery's blog
TOP

Videos, Slideshows and Podcasts by Cincopa Wordpress Plugin