This document discusses software design patterns. It defines a design pattern as a general reusable solution to common problems in software design. It describes the Gang of Four (GOF) design patterns book, which introduced and popularized design patterns. The GOF patterns are divided into creational, structural, and behavioral categories. Creational patterns deal with object creation. Structural patterns concern class and object composition. Behavioral patterns address communication between objects. Examples are provided for some of the most common patterns.