The Design Patterns Repository

Design patterns are not “reusable solutions” but instead create a rich language developers to communicate, collaborate, and make collective decisions about design.  When you study design patterns you are teaching yourself what good design is, and why.  

This repository delineates each pattern according to three kinds of forces:  This repository delineates each pattern according to three kinds of forces:

  1. Contextual Forces which help you to discover the appropriate pattern for the problem you are trying to solve
  2. Implementation Forces, which show you options and concerns when implementing each pattern
  3. Consequent Forces, which help you to evaluate the cost/benefit of each pattern as well as how to unit test it

The "original seed" material for this repository was taken directly from appendix B of Scott Bain's book Emergent Design: The Evolutionary Nature of Professional Software Development