====== Основные паттерны ======
===== Синглтон =====
Иногда вам надо получить инициализированную ссылку на конкретную Сущность, которая представляет собой глобальную комбинацию трейтов. Этого можно достичь через такой паттерн, как //синглтон//, который применяется в классическом ООП подходе.
Вы можете полностью достичь этого с помощью простого метода:
template < typename T, typename ...Ts >
T GetSingleton(AMechanism* const Mechanism)
{
const auto Filter = FFilter::Make();
const auto Chain = Mechanism->Enchain(Filter);
auto Cursor = Chain->Iterate(0, 1);
if (!Cursor.Provide())
{
checkNoEntry();
return T();
}
const auto Trait = Cursor.GetTrait();
verifyf(!Cursor.Provide(), TEXT("Two singleton objects detected!"));
return Trait;
}
После этого можете выполнить запрос уникального трейта вот так:
auto EnemyBalance = GetSingleton(Mechanism);