单例模式

<?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.滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失

原文地址:https://www.cnblogs.com/TzSteady/p/8569831.html