4.5.1 How to Implement the Factory Pattern