单例池(PHP 示例)
Multiton 可以用作单例的容器。这是 Multiton 实现是 Singleton 和 Pool 模式的组合。
这是一个如何创建常见的 Multiton 抽象 Pool 类的示例:
abstract class MultitonPoolAbstract
{
/**
* @var array
*/
protected static $instances = [];
final protected function __construct() {}
/**
* Get class name of lately binded class
*
* @return string
*/
final protected static function getClassName()
{
return get_called_class();
}
/**
* Instantiates a calling class object
*
* @return static
*/
public static function getInstance()
{
$className = static::getClassName();
if( !isset(self::$instances[$className]) ) {
self::$instances[$className] = new $className;
}
return self::$instances[$className];
}
/**
* Deletes a calling class object
*
* @return void
*/
public static function deleteInstance()
{
$className = static::getClassName();
if( isset(self::$instances[$className]) )
unset(self::$instances[$className]);
}
/*-------------------------------------------------------------------------
| Seal methods that can instantiate the class
|------------------------------------------------------------------------*/
final protected function __clone() {}
final protected function __sleep() {}
final protected function __wakeup() {}
}
这样我们就可以实例化各种 Singleton 池。