What is the difference between Factory and Abstract Factory Patterns?
The main basic difference between factory and Abstract factory is factory method uses the inheritance to decide which object has to be instantiated while the abstract factory uses the delegation to decide the instantiation of the object. We can say that Abstract factory uses factory method to done the architecture. The Abstract Factory is one level greater in abstraction over the Factory.
The 2 class figure below will provide the overview of what is the actual difference. First figure shows a sample of the implementation of the Factory Patterns. In this figure there are2 basic sections:-
1)The actual product section that is Class "Product" it inherits from an abstract class "AbstractProduct".
2)The creational aspect part that is . "ConcreteCreator" class which inherits from class "Creator".
3)Now there are various rules that the client will have to follow who will require the "Product" object. He will never suggest directly to the actual "Product" object he will suggest the "Product" object by using the "AbstractProduct".
4)The Second client will never use the "New" keyword to create the "Product" object but will use "Creator" class which in turn will use "ConcreteCreator" class to create a actual "Product" object.
Figure: - Class diagram of a factory Pattern
Now let's look at the second class diagram that provides an overview of what actually the "Abstract factory" pattern is. It creates objects for families of the classes. In brief it describes the collection of factor methods from different families. In brief it groups related to factory methods. For e.g. in this the class "Creator" is implemented by using the "Abstract" factory pattern. It then creates objects from the multiple families rather than one product.
Figure:-Class Diagram of Abstract Factory