You know what that is a great idea. Infact that is a genious idea. I never thought about handling the game states this way.
I can see many benefits that such approach could have in comparison to most oftenly used approach where you simply have one gloval variable teling your software in which state it is and then you use case statment to determine which part of the code should execute.
Main benefit would be the ability to have seperate initialization and finalization code for each state. Theese are being caled on creation or destruction of each state.
You can also easily make each state to actually have its own substates which could also be verry handy.
Also the same way as you are handling state specific drawing you could also handle state specific input handling. And all that by simply changing one variable.