Мне нравятся мультиметоды, когда вам не нужна иерархия классов. Например, если у вас есть база данных мультимедиа, и ваши записи похожи на {:media-type :video, :bytes ...}
, то вы можете иметь мультиметод
(defmulti make-grayscale :media-type)
. Затем вы можете сделать различные
; in video.clj
(defmethod make-grayscale :video [record]
(ffmpeg ... (:bytes record))
; in photo.clj
(defmethod make-grayscale :photo [record]
(imagemagick ... (:bytes record))
. Таким образом, вы может избежать наличия центрального выражения cond
, поэтому вы получаете модульность классов. Но вам не нужно проходить всю эту шаблонную иерархию классов «оболочка», которая для меня - это проклятие, которое нужно оставить для мира Java. Мультиметоды - это функции только и для меня больше clojuresque.