# Factory Method (aka Virtual constructor)

## Intent

* Define an interface for creating an object, but let subclasses decide which class to instantiate.
* The Factory method lets a class defer instantiation it uses to subclasses.

## Problem

* How can an object be created so that subclasses can redefine which class to instantiate?
* How can a class defer instantiation to subclasses?

## Solution

* Define a separate operation _(factory method)_ for creating an object.
* Create an object by calling a factory method.

## Advantages

✅ Avoid tight coupling between the creator and the concrete products.\
✅ Follows _Single Responsibility Principle_. As it moves the product creation code into one place in the program, making the code easier to support.\
✅ Follows _Open/Closed Principle_. As it becomes easier to introduce new types of products into the program without breaking existing client code.\


## Disadvantages

❌ The code may become more complicated since one needs to introduce a lot of new subclasses to implement the pattern.\


***

#### Note

💡 A similar pattern called `Factory` also exists, which is similar to factory method. 💡 A factory method is just an addition to Factory class. 💡 It creates the object of the class through interfaces but on the other hand, it also lets the subclass decide which class is instantiated.
