A software design pattern is a general reusable solution to a commonly occurring problem within a given context while designing as software.
The singleton pattern is a creational design pattern that is used to restricts the instantiation of a class to one object. This pattern becomes useful when exactly one object is needed to coordinate actions across the system. For example when there is situation to create the communication with database only one way, then it comes handy to use this pattern.
Observer Pattern is one of the behavioral design patterns which defines a one-to-many relationship between the objects so that when the state of one object, called as Subject, changes, all its dependents, called as Observers, are notified and updated automatically by calling their methods.
Strategy pattern is a behavioral design pattern that enables an algorithm to select it's at runtime. This pattern is also known as Policy Pattern.
Facade Pattern promotes decoupling the subsystem from its potentially many clients by encapsulating a complex subsystem within a single interface object. This reduces the communication and dependencies between the subsystems and reduces the complexity of the system.
The template method pattern is a behavioral design pattern that defines the program skeleton of an algorithm in a method, called template method. Because of this template method, it is possible for one to redefine certain steps of an algorithm without changing the algorithm's structure.
Composite pattern is a structural pattern which is used where we need to treat a group of objects in similar way as a single object. Composite pattern composes objects in term of a tree structure to represent part as well as whole hierarchy.
Command pattern is a behavioral design pattern in which an object is used to encapsulate all information needed to perform an action or trigger an event at a later time.
Iterator pattern is a behavioral design pattern in which an iterator is used to traverse a container and access the container's elements.
State pattern is a behavioral design pattern which allows a class behavior to changes based on its state.