This document discusses various design patterns for software engineering. It describes creational patterns like factory method, abstract factory, builder, singleton, and prototype that deal with object creation. It also covers structural patterns like adapter, bridge, composite, decorator, facade, flyweight, and proxy that focus on class and object composition. Additionally, it mentions behavioral patterns like chain of responsibility, command, iterator, mediator, template method, visitor, memento, observer, state, and strategy that are related to communication between objects. The document provides examples of when and how to use different design patterns to solve common programming problems.