All Classes and Interfaces

Class
Description
AbstractDocument aims to provide a consistent way to handle hierarchical and tree-like data structure without losing the type safety of the language
AbstractFactory is used when we need to isolate the object creation with group of dependant objects
Adapter is used to adapt two different object when client has one object and our api expects a different object
 
Ambassador is used to offload the common functionality like logging, retry, etc., away from the shared legacy application into the client code itself.
 
 
Bridge is used when we want to isolate the implementation LinkedList with the abstraction FIFOCollection
Builder is used when the constructor is complex or object creation has multiple steps
BusinessDelegate is used to add an abstraction layer between presentation tier and business tier
 
ChainOfResponsibility will be used to decouple the sender of request and the handler of request so that multiple handler can process the request and then pass the request to next handler
 
Command will be used to replace a method with an object and parameters by the object fields so that we can handle them in after some time or make another thread execute it.
Composite is used to handle the parent node and leaf node as same for the client
CompositeEntity allows a set of related objects to be represented and managed by a unified object
 
 
Decorator is used to add a simple functionality to existing classes without changing the total behavior
 
 
 
Facade is to create a simple use-case interface which can be directly used by the user without knowing/implementing all related classes needed for that use-case by the user.
FactoryMethod will have individual factory method classes XMLMessageMessageFactoryMethod, JSONMessageMessageFactoryMethod for every instances needed XMLMessage, JSONMessage and we cannot go with SimpleFactory since the Message might be extended by different concrete classes in the future
 
 
Flyweight is used when we can split the object as intrinsic (shared by all instances) and extrinsic (context based values which will be taken care by the client) values
 
 
 
 
 
Interpreter is used when it is needed to process a simple language with rules or grammar
Iterator is used to iterate sequentially over aggregate objects without exposing the internal collection used
 
 
 
 
 
 
Mediator is used to decouple the communication between the objects and let mediator object to handle the communication between group of objects
Memento will be used to snapshot an object's state, and then it can be used to restore the state at later point with the help of Command.
 
 
NullObject is used to represent absence of real object as a do nothing object
ObjectPool is used when the object creation is costly, so we have already created a pool of objects which can be reused
Observer is used to define one-to-many dependency between objects which are interested in the state of object
 
 
 
 
Prototype will be used when the object creation is costly or not possible, so we implement Cloneable as well and clone the object
Proxy is used to act as a stand-in instance for the real instance.
 
 
SimpleFactory is used to move the object creation in a separate method.
Singleton is used when there should be only one instance of the that class
State is used when the behaviour of the object is completely depend on the internal state of the object
 
 
 
Strategy is used to encapsulate the algorithms in different classes which can be configured in the context class
 
TemplateMethod is used to define the skeleton of algorithm in base class and which can be implemented in steps on the subclasses
 
 
 
 
Visitor is used to add new operations that work on objects without modifying class definitions