It has long been common practice in software design to use libraries of recurring solutions to solve common problems in software design. Such solutions are also called design patterns. Source: Design patterns