This document discusses several design patterns including the Proxy, Command, Observer, Strategy, Abstract Factory patterns. For each pattern, it provides examples of problems they can solve, their structure using UML diagrams, and how they work to decouple classes and support extensibility. It also discusses how clues in non-functional requirements can indicate when certain design patterns may be applicable.