Как правило, вы реализуете шаблон фабричного метода, в котором объект выделяет другой объект.Однако вы не пожинаете преимуществ класса Factory, поскольку напрямую привязываете выделенный тип к фабрике, а не позволяете фабрике абстрактно управлять всеми внутренними объектами.Например, вы можете сделать это из любого файла или только с фабрики для этого типа ресурса (CSoundManager): new CSound ();
Если это так, вы упускаете точку и в основном у вас есть только Singletonкоторый выделяет и управляет объектом.Рассмотрите возможность абстрагирования ваших типов ресурсов.Если CSound и CFont являются производными от IResource, у вас может быть CResourceManager, который просто получит перечисление или какой-либо идентификатор для этого типа и уменьшит связи и зависимости в вашей кодовой базе.Всякий раз, когда вам нужно было использовать этот объект, вы можете предоставлять тип, но, скорее всего, вы можете использовать абстрактный менеджер (CResourceManager) для обработки этих объектов с использованием общих интерфейсов (Update (), Create (), Destroy () и т. Д.).
В случае вашего менеджера звука помните, что звуки нужно загружать только один раз, и их можно создавать с уникальным состоянием.В этом праве менеджер ресурсов должен управлять фактическим ресурсом (CSound), а менеджер звука (CSoundManager) поддерживает отдельные экземпляры (например, CSoundInstance) и управляет микшированием (через CSoundMixer).Специализируйте свои классы осмысленными способами, которые управляют сложностью и уменьшают избыточность.
Я использовал диспетчер звука в качестве примера, но это справедливо для большинства систем ввода-вывода (графика, ввод, физика).