Factory Design Patterns In Java