В настоящее время я работаю над собственным вращением в системе компонентов.Я не планирую смотреть на «примеры» или что-то в этом роде до тех пор, пока не закончу, потому что хочу не просто неосознанно копировать другую работу, но и пытаться решить проблемы самостоятельно.Однако я также хочу, чтобы конечный продукт работал ХОРОШО.Я бы не писал здесь, если бы это не было для меня серьезной проблемой.
В школе я научился делать простой шаблон синглтона.Проблема, с которой я сталкиваюсь, решается с помощью этой схемы, однако я слышал и испытывал проблемы, связанные с продуманным и неправильным использованием синглтона.Поскольку я хочу сделать эту программу настолько большой, насколько смогу, не вдаваясь в ад разработки, я бы хотел этого избежать.
Проблема:
В моей компонентной системе компонент простокласс данных, который хранится в шаблонном классе, называемом «ComponentManager».Существует один для каждого типа, так как тип указывается при инициализации шаблона.
Компонент может включать в себя 100% поведения другого компонента.Например, компонент, представляющий модель в 3D-пространстве, также будет внедрять поведение простой точки в 3D-пространстве (поскольку он имеет местоположение в 3D-пространстве).
Чтобы можно было управлять всеми объектами, которые имеютопределенное свойство, например все объекты, которые могут быть размещены в трехмерном пространстве, я решил, что вместо того, чтобы просто оставить эту реализацию для идентификатора класса данных, можно сохранить прямую ссылку на другой компонент в той же сущности, используя компонент"class (этот класс может использоваться для надежного и простого извлечения определенного компонента из ComponentManager).
Поэтому все классы данных имеют возможность перезаписать функцию" init ".Эта функция необходима для перезаписи, так как я не хочу применять конструктор для каждого класса данных, который передает ключ для сущности в качестве параметра.Однако функция initRelations (так я ее назвал) имеет реализацию по умолчанию, которая просто пуста.
Здесь возникает реальная проблема: как легко и эффективно получить ComponentManager для компонентов, которые я могу добавить?Синглтон был бы хорош, но классы ComponentManager непосредственно хранят ВСЕ данные в них и поэтому используют много памяти.Они также не являются простыми классами, и я хочу сохранить для класса ComponentManager опцию получения базового класса и иметь «готовую к сценарию» версию, которая выполняет ручные проверки типов во время выполнения, и «быструю» версию, которая может использоваться для встроенных типов иэто просто шаблонная версия (об этом, однако, я могу забыть, если она делает вещи намного более сложными, а решение без этого намного чище. Может быть, я даже могу сделать это с одиночками, но я пока просто не знаю об этом?).
Мой вопрос:
Являются ли синглеты действительно лучшим способом решения моей проблемы?Есть ли лучшие способы сделать это?