Design Patterns Elements of Reusable Object-Oriented Software
(Author: Ralph Johnson)