Derived types must be completely substitutable for their base types.
A class should have only one reason to change.
Clients should not be forced to depend upon interfaces that they don’t use.
High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstractions should not depend on details. Details should depend on abstractions.
Software entities like classes, modules and functions should be open for extension but closed for modifications.
A fully initialized instance to be copied or cloned.
Solves the problem of telescoping constructor.
Facilitates the creation of other objects.
Creates an instance of several families of classes.. TypeScript: Compile code as follow: Abstract Factory TypeScript inspired from Head First Design Pattern book
A class of which only a single instance can exist.