Okay. Avoid Resource Managers!
Loading an object becomes such specific thing that the loading process should be handled by themselves and get stored in some
std::map<std::string, YourType> map
YourType* yt = new Type();
yt->Load(stream); //pass a renderer, or a audio map, or something else
not obeying the SRP? The only class that knows what an object is the class itself, if is not a concrete class should have a loader.
#1. class Model: you can have a class OBJLoader
#2. class OBJModel: pick it up a Renderer to store the textures, load the data, mtl files and if loads correctly insert that model in a container of your choice.
A Resource Manager can be done, but then you have to subclass a lot of things just for getting a objective: loading specific stuff.