#state-pattern