Split simulator abstraction to smaller abstractions and make them SOLID.
Split simulator abstraction to smaller abstractions and make them SOLID.