What is the Factory Pattern? | Software Design Principles