interfaceを使ったFiniteStateMachineだね。
ソース分割できてデバッグが超楽なので俺も使ってるが、
理解して応用できるようになるまでが大変だったw