strategy pattern in clojure