mirror of
https://github.com/DesignPatternsPHP/DesignPatternsPHP.git
synced 2025-06-18 06:57:44 +02:00
43 lines
884 B
PHP
43 lines
884 B
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace DesignPatterns\Structural\Flyweight;
|
|
|
|
use Countable;
|
|
|
|
/**
|
|
* A factory manages shared flyweights. Clients should not instantiate them directly,
|
|
* but let the factory take care of returning existing objects or creating new ones.
|
|
*/
|
|
class TextFactory implements Countable
|
|
{
|
|
/**
|
|
* @var Text[]
|
|
*/
|
|
private array $charPool = [];
|
|
|
|
public function get(string $name): Text
|
|
{
|
|
if (!isset($this->charPool[$name])) {
|
|
$this->charPool[$name] = $this->create($name);
|
|
}
|
|
|
|
return $this->charPool[$name];
|
|
}
|
|
|
|
private function create(string $name): Text
|
|
{
|
|
if (strlen($name) == 1) {
|
|
return new Character($name);
|
|
} else {
|
|
return new Word($name);
|
|
}
|
|
}
|
|
|
|
public function count(): int
|
|
{
|
|
return count($this->charPool);
|
|
}
|
|
}
|