In software engineering, creational design patterns are design patterns that deal with object creation mechanisms, trying to create objects in a manner suitable to the situation.
[6] As modern software engineering depends more on object composition than class inheritance, emphasis shifts away from hard-coding behaviors toward defining a smaller set of basic behaviors that can be composed into more complex ones.
[7] Hard-coding behaviors are inflexible because they require overriding or re-implementing the whole thing in order to change parts of the design.
Additionally, hard-coding does not promote reuse and makes it difficult to keep track of errors.
They provide different ways to remove explicit references in the concrete classes from the code that needs to instantiate them.