Design patterns are typical solutions to commonly occurring problems in software design. They are like pre-made blueprints that you can customize to solve a recurring design problem in your code.
patterns provide object creation mechanisms that increase flexibility and reuse of existing code.
patterns explain how to assemble objects and classes into larger structures, while keeping the structures flexible and efficient.
patterns take care of effective communication and the assignment of responsibilities between objects. [