Browse Clojure Foundations for Java Developers

Adopting Functional Design Patterns

Translate common Java design forces into data-first, composable functional patterns.

You do not “port” the Gang of Four patterns into Clojure one-to-one. The forces still exist—dependency management, extensibility, reuse, boundaries—but the solutions tend to be simpler when you start from data and pure functions.

This chapter connects familiar Java design problems to Clojure patterns: composition over inheritance, functions over strategy objects, data-driven dispatch, and using small pure units that you can test in isolation.

The goal is to help your Java experience transfer cleanly, without dragging along ceremony that Clojure does not need.

In this section

Revised on Friday, April 24, 2026