Design Patterns

Creational Design Patterns

Factory Method PatternVirtual Constructor Factory Method Pattern allows the sub-classes to choose the type of objects to create. It promotes the loose-coupling by eliminating the need to bind application-specific classes into the code. That means the code interacts solely with the resultant interface or abstract class, so that it will work with any classes that implement that interface or that extends that abstract class.  Allows sub classes to choose type ofobjects to create
Abstract Factory Methodkitdefine an interface or abstract class for creating families of related (or dependent) objects but without specifying their concrete sub-classes.    Abstract Factory Pattern isolates the client code from concrete (implementation) classes. It eases the exchanging of object families. It promotes consistency among objects.   
Singleton define a class that has only one instance and provides a global point of access to it  Saves memory because object is not created at each request. Only single instance is reused again and again.    Singleton pattern is mostly used in multi-threaded and database applications. It is used in logging, caching, thread pools, configuration settings etc.    
Prototype cloning of an existing object instead of creating new one and can also be customized as per the requirement.  it reduces the need of sub-classing. It hides complexities of creating objects. The clients can get new objects without knowing which type of object it will be. It lets you add odocker remove objects at runtime.    When the classes are instantiated at runtime. When the cost of creating an object is expensive or complicated. When you want to keep the number of classes in an application minimum. When the client application needs to be unaware of object creation and representation.    
Builder construct a complex object from simple objects using step-by-step approach  It provides clear separation between the construction and representation of an object. It provides better control over construction process. It supports to change the internal representation of objects.   
Object pool to reuse the object that are expensive to create  


Structural design patterns are concerned with how classes and objects can be composed, to form larger structures.

The structural design patterns simplifies the structure by identifying the relationships.

AdapterWrapperAdvantages It allows two or more previously incompatible objects to interact. It allows reusability of existing functionality.    It is used: When an object needs to utilize an existing class with an incompatible interface. When you want to create a reusable class that cooperates with classes which don’t have compatible interfaces. When you want to create a reusable class that cooperates with classes which don’t have compatible interfaces.       
Bridge “decouple the functional abstraction from the implementation so that the two can vary independently  It enables the separation of implementation from the interface. It improves the extensibility. It allows the hiding of implementation details from the client.      When you don’t want a permanent binding between the functional abstraction and its implementation. When both the functional abstraction and its implementation need to extended using sub-classes. It is mostly used in those places where changes are made in the implementation does not affect the clients.      


Behavioral design patterns are concerned with the interaction and responsibility of objects.

In these design patterns,the interaction between the objects should be in such a way that they can easily talk to each other and still should be loosely coupled.