So far in this book, we have looked closely at many of the most significant creational and structural design patterns. This has given us the power to construct all manner of architectures, but to perform the tasks we require, these structures need to be able to communicate, between their own elements and with other structures.
Behavioral patterns were designed for modeling many of the general development problems we encounter on a regular basis, such as responding to a change in state of a particular object or adapting behavior to accord with a hardware change. We have already encountered one, in the last chapter with the observer, and here we will look further into some of the most useful behavioral patterns.
Behavioral patterns are far more adaptable in terms of the variety of tasks they can perform than creational and behavioral patterns, and although this flexibility is great, it can also complicate matters when it comes to selecting the best possible pattern...