Abstract factory pattern - implementation started #1