A software design pattern is a general, reusable solution to a commonly occurring problem within a given context in software design.