Systems Container
Описание
Модуль SystemsContainer
предоставляет механизм кэширования инстансов Систем в ECS фреймворке. Он гарантирует, что в приложении существует только один экземпляр каждой Системы.
Назначение
- Управление жизненным циклом Систем
- Кэширование инстансов Систем
- Предотвращение дублирования Систем
- Оптимизация использования памяти
Архитектура
Основные классы
- SystemsContainer - контейнер для кэширования Систем
- ISystemsContainer - интерфейс контейнера
Диаграмма зависимостей
SystemsContainer
├── System (кэшируемые системы)
└── SystemType (тип конструктора системы)
Использование
Получение инстанса Системы
// Контейнер создается автоматически в EmpressCore
const container = new SystemsContainer();
// Получение Системы (создастся новый инстанс)
const system = container.get(MovementSystem);
// Повторное получение (вернется существующий инстанс)
const sameSystem = container.get(MovementSystem);
// system === sameSystem // true
Использование в SystemGroup
class MovementGroup extends SystemGroup<Vec2> {
public setup(chain: SystemChain, data: Vec2): void {
// SystemsContainer автоматически создаст или вернет
// существующий инстанс MovementSystem
chain.add(MovementSystem, data);
}
}
API
Класс SystemsContainer
Методы
get(ctor: SystemType<any, any>): ISystem<any>
- получает или создает инстанс Системы
Свойства
_cache: Map<SystemType, ISystem>
- приватное хранилище инстансов
FAQ
Когда создаются инстансы Систем?
Инстансы создаются при первом запросе через метод get
. Все последующие запросы возвращают существующий инстанс из кэша.
Можно ли иметь несколько экземпляров одной Системы?
Нет, SystemsContainer гарантирует, что в приложении существует только один экземпляр каждой Системы.
Как долго живут инстансы Систем?
Инстансы создаются при первом запросе и существуют на протяжении всего времени работы приложения.
Как это влияет на производительность?
- Уменьшает использование памяти за счет предотвращения дублирования Систем
- Ускоряет доступ к Системам за счет кэширования
- Оптимизирует создание объектов, создавая их только при необходимости
Нужно ли вручную управлять SystemsContainer?
Нет, контейнер создается и управляется автоматически в EmpressCore. Разработчику достаточно определять свои Системы и использовать их в SystemGroup.