In software engineering, a design pattern is a general repeatable solution to a commonly occurring problem in software design.It is a description or template for how to solve a problem that can be used in many different situations.
These design patterns are all about class instantiation. While class-creation patterns use inheritance effectively in the instantiation process, object-creation patterns use delegation effectively to get the job done. -Singleton Pattern -Factory Pattern -Abstract Factory Pattern -Builder Pattern -Prototype Pattern
These design patterns are all about Class and Object composition. Structural class-creation patterns use inheritance to compose interfaces. Structural object-patterns define ways to compose objects to obtain new functionality. -Adapter Pattern -Bridge Pattern -Filter Pattern -Composite Pattern -Decorator Pattern -Facade Pattern -Flyweight Pattern -Proxy Pattern
These design patterns are all about Class's objects communication. Behavioral patterns are those patterns that are most specifically concerned with communication between objects. -Chain of Responsibility Pattern -Command Pattern -Interpreter Pattern -Iterator Pattern -Mediator Pattern -Memento Pattern -Observer Pattern -Null Object Pattern -Strategy Pattern -State Pattern -Visitor Pattern