The factory pattern is another commonly-used creational design pattern. This pattern provides a way to create objects for clients without knowing the concrete object types. It simplifies the way we create objects when we are dealing with multiple implementations of a type and the implementation type has to be chosen based on the context provided.
Let's consider the following code snippet:
val sensor:Sensor = TemperatureSensor()
Here, we are directly instantiating the concrete type in our code. Our client code is directly dependent on the Sensor implementation types. If we have another type, such as HumiditySensor, to be used, then we have to modify our code to accommodate this change:
@JvmStaticfun main