AbstractFactory v1