Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.
In short we want polymorphic dispatch.
We have covered polymorphism several times in other posts, so i'm to lazy to do it again:
see run time polymorphic in clojure Or mishadoff version of the State pattern in Clojure, which i 100% agree with.
Clojure supports Run time polymorphism,