By definition, Design Patterns are reusable solutions to commonly occurring problems(in the context of software design). Design patterns were started as best practices that were applied again and again to similar problems encountered in different contexts. They become popular after they were collected, in a formalized form, in the Gang Of Four book in 1994. Originally published with c++ and smalltalk code samples, design patterns are very popular in Java and C# can be applied in all object-oriented languages. In functional languages like Scala, certain patterns are not necessary anymore.