Complete 'Factory Pattern'