... you’ll find recurring patterns of classes
and communicating objects in many object-oriented systems.
These patterns solve specific design problems and make object-oriented design more flexible,
elegant, and ultimately reusable. They help designers
reuse successful designs by basing new designs on prior experience. A designer
who is familiar with such patterns can apply them
immediately to design problems without having to rediscover them.