Software design patterns have a considerable impact on the software development life cycle. Design pattern (DP) is a reliable and reusable solution provided by software experts to obtain quality software design. However, due to the large number of design patterns, selecting the appropriate one is quite difficult. To overcome this difficulty, several approaches with different methods have been presented to suggest the appropriate DP. Despite conducting a number of studies that have explored some aspects of this field, such as design pattern selection tools and techniques, there is a need for a deeper understanding, analysis, classification, and thorough review of the design pattern selection process. So far, no systematic review of design pattern selection approaches is available. This paper aims to classify existing approaches, provide several criteria for comparing approaches, analyze each one, and identify and analyze the most important elements in this field, including open issues, data sets, and so on. The present investigation paper will help future research to employ the existing approaches taking into account the specification of each one and it also raises awareness about the approaches used in previous research and their potential limitations.