A software design pattern is a general reusable solution to a commonly occurring problem within a given context while designing as software.
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.
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.
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.
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.