Разделение общего состояния между множеством объектов для экономии памяти. Общее состояние выносится в один объект (flyweight), уникальное хранится снаружи.
class TreeType {
public function __construct(private string $name, private string $color) {}
}
class TreeFactory {
private array $types = [];
public function getType(string $name, string $color): TreeType {
$key = $name . '-' . $color;
return $this->types[$key] ??= new TreeType($name, $color);
}
}Применение: символы в текстовом редакторе, деревья в игре, повторяющиеся иконки.