Design of object oriented software is hard: People who are familiar with object oriented software development are familiar with the fact that designing reusable object oriented software is very hard. So, what will make the development of reusable software easier?
Experienced Vs novice designers: The experienced designers use their knowledge they had gained from their experience in designing object oriented software. The novice designers who have no experience in designing are left with numerous ways to develop the designs which may lead them to develop ineffective designs.
The experienced designers have documented their experience as design patterns. These design patterns helps the novice designers to develop the right and effective design.
Flexible, elegant and reusable software: By applying design patterns we can develop software that is flexible: software that is easily adaptable, elegant: easy to understand and code, and reusable: designs or code can be reused for developing software in the future.
Documentation: As a software designer and developer we will be developing a variety of software for several problems. While designing, we will observe some patterns which will be encountered in other future designs. It is a human habit to forget what we do now.
So, we can document the patterns we observe in our designs for future reference. Design patterns are well documented which provide us with necessary information when needed.