У меня есть объект класса Level
, который имеет несколько подсистем (дочерние объекты) использует для управления своим состоянием (например, EntityManager
, InputManager
, Physics
). Я хочу разоблачить некоторые из этих подсистем во внешнем интерфейсе Level
.Разоблачение методы ребенка объекта без дублирования
Вот одно решение:
uint32_t Level::CreateEntity()
{
return entityManager.CreateEntity();
}
Entity& Level::GetEntity(uint32_t entityId)
{
return entityManager.GetEntity(entityId);
}
uint16_t Level::CreateInputState()
{
return inputManager.CreateInputState();
}
void Level::AttachInputState(uint32_t entityId, uint16_t inputStateId)
{
inputManager.AttachInputState(entityId, inputStateId);
}
InputState& Level::GetInputState(uint16_t inputStateId)
{
return inputManager.GetInputState(inputStateId);
}
Это решение требует, чтобы я дублировать объявления методы внутри Level
класса и писать вызовы однострочных, которые перенаправляют управление в подсистему. В проектах, над которыми я работал в прошлом, это было трудным для управления.
Другим решением является выявление подсистем в открытом интерфейсе. Предпочтительно этого можно избежать, поскольку не важно, чтобы объекты за пределами Level
подсистемы вызывали пересылку.
Есть ли дизайн, который мог бы более элегантно справиться с этой проблемой?
Вы хотите выставить все функции для детей или только некоторые специальные? – Nobody
Почему объекты-менеджеры должны быть членами 'Level'? – wilhelmtell
@Nobody Только некоторые специальные. – Kai