<?php
class Preferences{
private $props = [];
//实例载体,利用静态的属性
private static $instance;
private function __construct(){}
public static function getInstance()
{
//仅被实例一次
if( empty( self::$instance) )
{
self::$instance = new Preferences();
}
return self::$instance;
}
public function setProperty( $key, $val )
{
$this->props[$key] = $val;
}
public function getProperty( $key)
{
return $this->props[$key];
}
}
$prev = Preferences::getInstance();
$prev->setProperty("name","TzSteady");
unset($prev);
$prev2 = Preferences::getInstance();
var_dump($prev2->getProperty("name"));
//通过调用getInstance来获取实例对象,并且仅此被实例一次
单例模式的优点:
1.提供了唯一实例的受控访问
2.节省资源,因为只有一个对象
缺点:
1.因为没有抽象层,所以扩展有很大的困难
2.依赖性太强
3.滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失