Очень сталкиваюсь с проблемой менеджмента объектов. Например, сейчас пишу класс Profiler для замера скорости выполнения участков кода. Объектами этого класса нужно управлять, так как например одна функция может выполнятся несколько раз и в профайле нужно подсчитывать количество вызовов, среднее время исполнения и т.д.
Есть два варианта менеджмента этих объектов:
1. Создать статические методы в Profiler:
/// Делает профайлер текущим, осуществляется замер времени
static void startProfiler(int id);
/// Замер времени останавливается
static void stopProfiler(int id);
2. Создать менеджер-синглтон который и будет осуществлять менеджмент объектов класса. Минус этого подхода в том, что нужно осуществлять менджмент большого количества экземлпяров разных классов и на каждый такой класс делать собственный менеджер. То есть, например у меня есть различные ресурсы: текстуры (1D, 2D, 3D, Cube), меши, изображения, шейдеры, шрифты, материалы и т.д.. Иногда требуются методы для загрузки всех ресурсов, обращению к некоторому ресурсу и т.д. Не слишком ли много менеджеров будет?
Вот теперь думаю как лучше делать. Со статическими методами выглядит весьма просто - но не знаю как он поведет себя в долгосрочной перспективе. Использование менеджеров смотрится как ООП-way, но на каждый ресурс по своему менджеру - очень много классов.