Я хочу предоставить несколько реализаций устройства чтения/записи сообщений. Каков наилучший подход?
Вот какой-то псевдокод того, что я сейчас думаю:
-
просто есть набор функций, которые должны быть реализованы всеми реализациями, и оставить его вызывающему, чтобы удерживать нужные потоки.
(ns x-format) (read-message [stream] ...) (write-message [stream message] ...)
-
возвращает карту с двумя замкнутыми функциями, удерживающимися в потоке
(ns x-format) (defn make-formatter [socket] {:read (fn [] (.read (.getInputStream socket)))) :write (fn [message] (.write (.getOutputStream socket) message)))})
-
что-то еще?