单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。所有的单例模式至少拥有以下三种公共元素一般来说比较适用数据库连接对象
介绍
单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。所有的单例模式至少拥有以下三种公共元素一般来说比较适用数据库连接对象
- 必须拥有一个构造函数,并且必须标记为private
- 必须拥有一个保存实例对象的静态成员变量
- 必须拥有一个访问这个实例的public function
单例类不能在其他类中做初始化,只能被自己实例话;不会创建实例副本,而是会给存储实例的成员变量赋值
PHP代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| <?php class Single{ private $name; private function __construct() { } private function __clone() { }
public static $instance; public static function getInstance() { if(!self::$instance){ self::$instance = new self(); } return self::$instance; } public function setTag($n) { $this->name = $n; } public function getTag(){ return $this->name; } }
$a = Single::getInstance(); $b = Single::getInstance(); $a->setname('hello'); $b->setname('go-die'); echo $a; echo $b;
|
提问
1. 为什么这里的getInstance方法要用静态方法呢?
答: 单例类不能进行实例化,只能通过静态方法,内部进行实例化