Thank you.
I had managed three different routes and wasn't in love with any of them.

1. Functions return a closure with each state handler as input.
2. Generate an interface for each set of states and someone has to create a class with them and provide it to the function.
3. Simple abstracts