mirror of
https://github.com/DesignPatternsPHP/DesignPatternsPHP.git
synced 2025-02-24 17:52:25 +01:00
45 lines
979 B
PHP
45 lines
979 B
PHP
<?php
|
|
|
|
namespace DesignPatterns\Creational\Pool;
|
|
|
|
class WorkerPool implements \Countable
|
|
{
|
|
/**
|
|
* @var StringReverseWorker[]
|
|
*/
|
|
private $occupiedWorkers = [];
|
|
|
|
/**
|
|
* @var StringReverseWorker[]
|
|
*/
|
|
private $freeWorkers = [];
|
|
|
|
public function get(): StringReverseWorker
|
|
{
|
|
if (count($this->freeWorkers) == 0) {
|
|
$worker = new StringReverseWorker();
|
|
} else {
|
|
$worker = array_pop($this->freeWorkers);
|
|
}
|
|
|
|
$this->occupiedWorkers[spl_object_hash($worker)] = $worker;
|
|
|
|
return $worker;
|
|
}
|
|
|
|
public function dispose(StringReverseWorker $worker)
|
|
{
|
|
$key = spl_object_hash($worker);
|
|
|
|
if (isset($this->occupiedWorkers[$key])) {
|
|
unset($this->occupiedWorkers[$key]);
|
|
$this->freeWorkers[$key] = $worker;
|
|
}
|
|
}
|
|
|
|
public function count(): int
|
|
{
|
|
return count($this->occupiedWorkers) + count($this->freeWorkers);
|
|
}
|
|
}
|