6 works · 2 rooms
What the book got right
In 1994 four authors catalogued twenty-three ways of arranging objects, and the book became the most cited thing in the field. Thirty years later almost nobody reaches for it, which is usually told as a story about the book being wrong.
This tour argues something else: that the catalogue was largely right, and that being right is exactly why so much of it disappeared. A pattern is a workaround for something a language cannot say. Give the language the missing words and the pattern stops being a pattern and becomes syntax — which looks like obsolescence and is actually the highest compliment available.
Six works, two rooms, walked in order. Watch what happens to each idea.
Walking it takes you into the rooms, one work at a time. Everything below is the same tour, read here.
Gallery of Patterns
SingletonTypeScript · 1994
Start with the one the authors themselves came to regret.
It is the most famous entry in the catalogue and the clearest case of a pattern that did not dissolve into anything, because the problem it solves was never really a language problem. It is a decision about ownership, made in the wrong place — at the point of writing rather than the point of use — and no amount of syntax fixes that.
Everything else on this tour got better with time. This one only got more argued about.
StrategyTypeScript · 1994
Here is the dissolving, in its purest form.
The 1994 drawing is an interface with one method and a family of classes implementing it. That drawing was honest: in a language without first-class functions, a one-method interface genuinely *is* how you pass behaviour around.
Give the language closures and the whole apparatus collapses into a type alias. Nobody writing this today would call it a pattern. They would call it an argument, and they would be describing the same design decision the book described.
ObserverTypeScript · 1994
The one that did not dissolve — it colonised.
Every event system you have used is this, wearing different clothes: DOM listeners, React state, message queues, a spreadsheet cell recalculating when you edit its neighbour. It did not become syntax; it became infrastructure, which is the other way a pattern can win.
Notice how small it is. The whole idea is a list and a loop, and the only subtle line is the one that iterates a copy — because an observer is allowed to remove itself while being told something.
Hall of Composition
AdapterTypeScript · 1994
Through the door, into the room about arrangement rather than behaviour.
This is the pattern that has changed least, and it will not change, because it is not compensating for anything the language lacks. It exists because you do not control both sides of an interface, and no language feature will ever fix that — it is a fact about organisations, not about type systems.
The 1994 description would compile today with no edits worth making.
ProxyTypeScript · 1994
And here is the third fate: the pattern that became a keyword.
JavaScript grew a
Proxyin 2015, and the thing the book described — an object implementing the same interface as another and choosing what to forward — became something the runtime does for you.This is not merely tidier. A hand-written proxy has to name every method it forwards, so it silently breaks when the interface grows. The language version intercepts the *act of access*, so it keeps working through changes nobody told it about. That is a new capability, not a shorter spelling.
Chain of ResponsibilityTypeScript · 1994
Finish with the one that won under its own name.
You used this today. It is the middleware stack in every web framework written in the last twenty years, and it is one of very few entries in the catalogue that arrived at ubiquity without being renamed or absorbed.
The version that won is also subtly better than the drawing. Because
nextis a function the handler calls rather than a pointer it delegates to, a handler can run code before *and after* the rest of the chain — which is how timing, logging, transactions and error boundaries are all written. The 1994 linked list could only decline. The closure can wrap.
The other tours
- A first visitOne work from each room, in the order the corridor runs — the shortest walk that shows what the museum is for.
- hello, world in seven languagesThe same twelve characters in C, Python, Lua, Rust, COBOL, x86-64 assembly and Brainfuck, walked in an order that turns the joke into an argument.