Chapter 10. Design Patterns with First-Class Functions
Conformity to patterns is not a measure of goodness.
Ralph Johnson, coauthor of the Design Patterns classic1
In software engineering, a design pattern is a general recipe for solving a common design problem. You don’t need to know design patterns to follow this chapter. I will explain the patterns used in the examples.
The use of design patterns in programming was popularized by the landmark book Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley) by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides—a.k.a. “the Gang of Four.” The book is a catalog of 23 patterns consisting of arrangements of classes exemplified with code in C++, but assumed to be useful in other object-oriented languages as well.
Although design patterns are language independent, that does not mean every pattern applies to every language. For example, Chapter 17 will show that it doesn’t make sense to emulate the recipe of the Iterator pattern in Python, because the pattern is embedded in the language and ready to use in the form of generators—which don’t need classes to work, and require less code than the classic recipe.
The authors of Design Patterns acknowledge in their introduction that the implementation language determines which patterns are relevant:
The choice of programming language is important because it influences one’s point of view. Our patterns assume Smalltalk/C++-level language features, and that ...