单例模式被当作职责模式,被用来在应用程序中创建一个单一的功能访问点。比如,在OOP中,一个对象只负责一个特定的任务(一个对象去访问数据库等)。
作用:
1)节约系统资源。单例类仅有一个实例存在。
2)维持应用程序状态的同步
特点(至少以下四个特点):
1)必须拥有访问级别为private的构造函数。因为单例类不能在其它类中直接实例化,只能被其自身实例化。
2)拥有一个保存类的实例的静态成员变量。
3)拥有一个访问实例的公共的静态方法。
4)必须创建一个空的访问级别为private的__clone()方法。单例类不会创建实例的副本,而是内部存储的实例返回一个引用。
举例:数据库连接职责的集中控制
class Db { private $_db; // 构建对象时其值被填充 public static $_instance; // 静态变量,用于保存类仅有的一个实例 private function __construct() { $this->_db = pg_connnect('.....'); } // 私有的__clone方法消除了PHP语言中可以复制对象,防止破坏单一职责 private __clone() {} // 单例模式的实际构造 public static function getInstance() { // 检查静态实例变量是否已保存Db类的一个实例 if (! (self::$_instance instanceof self)) { self::$_instance = new self(); } return self::$_instance; } public functon query($sql) { // 执行查询的code } }