Behavioral patterns are software design patterns that attempt to systematize common ways of dealing with algorithms and assigning the responsibility of those algorithms between classes. For the most part, behavioral patterns create or promote class-level separation of algorithms and their use. We gain explicitness from designing our system in this way.
There are two types of behavioral patterns: class patterns and object patterns. Class patterns use inheritance to implement making the distribution of responsibility explicit. Object patterns use object composition to implement making the distribution of responsibility explicit. Inheritance as a means to keep responsibility separate is probably fairly obvious; object composition might require a bit of explanation. Object composition uses distinct classes in the same way that inheritance would need to; but those classes are unrelated and would be used in groups within another to implement specific functionality.
So, why...