A (software) design pattern is a general, reusable solution to a commonly occurring problem withing a given context. Christoper Alexander inspired the Gang of four to apply pattern to software and enumerate 23 classic software pattern.
This article discusses how to use some of them in the context of Apex controllers.
The context: Same same, but different
You are creating an application to support construction on force.com that will serve multiple countries. Part of the requirements is to compute a risk score for any given project. While ISO standards form the foundation of the assessment, each jurisdiction has some specialties that alter the logic eventually.
This is just one of the requirements, you have many more that follow the
pattern Same Same - But different.
Besides those, you want to know Apex Enterprise Patterns. Go Trailhead and learn