AbstractFactory.js