せずに、オブジェクトの子のメソッドを公開私はそれがその状態(例えばEntityManager
、InputManager
、Physics
)を管理するために使用するいくつかのサブシステム(子オブジェクト)を持つクラスLevel
のオブジェクトを持っています。私は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
クラス内のメソッド宣言を複製し、サブシステムに制御をリダイレクトする1行の呼び出しを書くために私を必要とします。
は、ここに1つのソリューションです。私が過去に取り組んできたプロジェクトでは、これは管理が面倒です。
もう1つの解決策は、パブリックインターフェイスでサブシステムを公開することです。 Level
の外にあるオブジェクトがコールを転送するサブシステムにとって重要ではないので、これを避けることができます。
この問題をよりエレガントに処理できるデザインはありますか?
子供の機能のすべてを公開したいのですか、特別な機能のみを公開しますか? – Nobody
なぜマネージャオブジェクトは 'Level'のメンバである必要がありますか? – wilhelmtell
@Nobody特別なもののみ。 – Kai