I think using transitions it is not as bad idea as it looks. Since either way you need to define the flows to give user correct options. With transitions you have it by default.
Of course you can do what HuiSheng described but in general using *Impl classes is not recommended.