This paper walks through several design patterns, showing how those patterns are used in application design. It then shows the costs and benefits of many patterns and talk about the traps and pitfalls that new pattern users often encounter. Each pattern will be presented in UML, with Java or C++ code to back it up.