单例模式(职责模式/单态模式)
1. 特点:
在程序中创建一个单一功能的访问点,即实例化出的对象是唯一的,常用于数据库的连接对象,windows的任务管理器,回收站,应用程序的日志,网站的计数器(实现同步)等。
2. 关键要素(三私一公)
1> 私有化构造函数,__clone函数,实际操作对象(eg:数据库操作对象);
2>公开静态成员方法(创建类的对象)
3. 类的结构图
4. 代码实现
class Single {
//声明一个私有的实例变量
private $name;
//声明一个静态变量(保存在类中唯一的一个实例)
public static $instance;
//声明私有构造方法为了防止外部代码使用new来创建对象。
private function __construct(){
}
//防止通过对象克隆的方式产生对象
private function __clone(){
}
//声明一个getinstance()静态方法,用于检测是否有实例对象
public static function getinstance(){
if(!(self::$instance instanceof self)) self::$instance = new self();
return self::$instance;
}
public function setname($n){
$this->name = $n;
}
public function getname(){
return $this->name;
}
}
//test case
$oa = Single::getinstance();
$ob = Single::getinstance();
// $ob = clone $oa;
$oa->setname('hello world');
$ob->setname('good morning');
echo $oa->getname();//good morning
echo $ob->getname();//good morning