Yea , but i'm searching for an implementation that will isolate every thing in the engine, and your idea doesn't seem really structured to me (a little messy to communicate like this). I thought that the most appropriate communication would have been to send some command from the System to the SystemManager and the SystemMAnager to the Engine? and so the Engine to the ComponentManager to retrieve the component. I am not really sure but i think that building a game engine like an Operating System is the most expandable and generic idea in my mind to build on top lots of games. Any other opinions?
Like Boreal Games said, speed is important here. Presumably Systems are going to be batch processing 100s/1000s of entities/components, so they should have a quick way to enumerate through those entities' components.
That said, even if performance weren't an issue, without knowing more about your design goals I would still go with the simplest way.
If you want to create an expandable/generic engine, you need to come up with scenarios of how you'll want people to plug into it (what functionality is extensible) - only then can you come up with a good design. It sort of sounds from your original post that you want to be able to substitute every single piece of your engine. Is that really your design goal? How do you envision it being used?
There's no "right" way to design something - only a "right" way to design something given a set of goals/scenarios.