There's probably loads of OO mistakes here but this was a little play around I did with implementing a State pattern where the states are able to choose which state to next but the managing code deals with creation of the classes, transition and injecting context/services.